|
Почему медленно удаляються объекты даже в транзакции? | ☑ | ||
---|---|---|---|---|
0
Shur1cIT
31.05.13
✎
17:22
|
может транзакцию не правильно юзаю?
Процедура ОсновныеДействияФормыУдалитьСсылки(Кнопка) НачатьТранзакцию(); Для каждого Стр ИЗ ЭлементыФормы.Ссылки.Значение Цикл Если Строка(ТипЗнч(Стр.Данные)) = "Реализация товаров и услуг" Или Строка(ТипЗнч(Стр.Данные)) = "Поступление товаров и услуг" Тогда Сообщить(Стр.Данные); Стр.Данные.ПолучитьОбъект().удалить(); КонецЕсли; КонецЦикла; Сообщить("Завершаем транзакцию"); ЗафиксироватьТранзакцию(); КонецПроцедуры |
|||
1
Господин ПЖ
31.05.13
✎
17:22
|
жестЪ
|
|||
2
Wobland
31.05.13
✎
17:23
|
множественное сообщить вообще неплохо так систему грузит
|
|||
3
Shur1cIT
31.05.13
✎
17:23
|
(1) где-то ошибка да?
|
|||
4
Wobland
31.05.13
✎
17:23
|
(3) Строка(ТипЗнч(Стр.Данные)) как минимум
|
|||
5
Shur1cIT
31.05.13
✎
17:23
|
сообщить для проверки, но реально одно "сообщить" в секунду как будто не в транзакции
|
|||
6
vde69
31.05.13
✎
17:26
|
1. нет отката по ошибке
2. сравнение по синониму метаданных (надо по типам) 3. транзакция неограниченного размера - обычно медленно (оптимально по 200-500 элементов за одну транзакцию) 4. сообщить на каждой итерации - не гуд |
|||
7
H A D G E H O G s
31.05.13
✎
17:27
|
(3) Ошибка в том, что ты не послушал моего совета 3-х недельной давности и не поменял профессию.
|
|||
8
acsent
31.05.13
✎
17:29
|
В отличии от 77 транзакция вообще не ускоряет, а даже замедляет выполнение команд
|
|||
9
Jaap Vduul
31.05.13
✎
17:29
|
А кто-то обещал, что в транзакции будет быстрее?
|
|||
10
Shur1cIT
31.05.13
✎
17:29
|
Стр.Данные.ПолучитьОбъект().удалить();
по замерам выполняет 75% времени |
|||
11
acsent
31.05.13
✎
17:29
|
отключи регистры на время удаления
|
|||
12
Shur1cIT
31.05.13
✎
17:30
|
(8) (9) так ить всегда убыстряла так как физическое удаление происходит только при фиксировании транзакции
|
|||
13
Shur1cIT
31.05.13
✎
17:33
|
(1) (7) это одноразовая обработка на коленке
|
|||
14
Jaap Vduul
31.05.13
✎
17:33
|
(12)
С чего бы вдруг? |
|||
15
Shur1cIT
31.05.13
✎
17:33
|
(14) а разве нет?
|
|||
16
ДенисЧ
31.05.13
✎
17:34
|
(15) нет
|
|||
17
Shur1cIT
31.05.13
✎
17:38
|
значит что-то спутал... наверно с 77
|
|||
18
vde69
31.05.13
✎
17:40
|
примерно так, за ошибки и стиль извеняйте, пишу "с листа"
Процедура ОсновныеДействияФормыУдалитьСсылки(Кнопка) НачатьТранзакцию(); е = 1; попытка м = ЭлементыФормы.Ссылки.Значение; т1 = ТипЗнч(Документы.РеализацияТоваров.ПустаяСсылка); т2 = ТипЗнч(Документы.ПоступлениеТоваров.ПустаяСсылка); Для каждого Стр ИЗ м Цикл тд = Стр.Данные; Если (ТипЗнч(тд) = т1) Или (ТипЗнч(тд) = т2) Тогда // Сообщить(Стр.Данные); од = тд.получитьобъект(); од.Удалить(); КонецЕсли; если е > 500 Тогда ЗафиксироватьТранзакцию(); НачатьТранзакцию(); е = 1; конецесли; е=е+1; КонецЦикла; если транзакцияактивна() тогда ЗафиксироватьТранзакцию(); конецесли; исключение сообщить ("трендец"); если транзакцияактивна() тогда отменитьтранзакцию(); конецесли; конецпопытки КонецПроцедуры |
|||
19
Shur1cIT
31.05.13
✎
17:41
|
львиную долю од.Удалить();
занимает как и у меня |
|||
20
Shur1cIT
31.05.13
✎
17:42
|
остальное копейки которыми для отчета на коленке можно принебречь
|
|||
21
H A D G E H O G s
31.05.13
✎
17:43
|
Зайти в ТонкийКлиент и отключить пересчет Итогов.
|
|||
22
H A D G E H O G s
31.05.13
✎
17:43
|
А потом включить
|
|||
23
vde69
31.05.13
✎
17:44
|
еще можно
од = тд.получитьобъект(); од.обменданными.загрузка = истина; од.Удалить(); будет быстрее, только не забудь что движения могут остатся висеть |
|||
24
H A D G E H O G s
31.05.13
✎
17:44
|
Глобальный контекст (Global context)
УдалитьОбъекты (DeleteObjects) Синтаксис: УдалитьОбъекты(<СписокСсылок>, <Проверять>, <НайденныеДанные>) |
|||
25
Shur1cIT
31.05.13
✎
17:45
|
(24) ок спасибо !
|
|||
26
krbIso
31.05.13
✎
17:46
|
нафига вообще тут НачатьТранзакцию?, при удалении и так неявная транзакция будет открыта
|
|||
27
Shur1cIT
31.05.13
✎
17:47
|
(26) я предполагал что быстрее будет как в 77
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |