Самый быстрый алгоритм удаления строк из ТЗ #184652


#0 by fisher
Напомните, плиз, в двух словах (чтоб долго не искать), суть самого быстрого алгоритма удаления строк из ТЗ по итогам конкурса (того, что на проклаб выкладывалось). Если не требуется сохранения исходного порядка строк.Проставка в отдельной колонке признака удаления строки, сортировка по нему, выгрузка в новую таблицу того, что должно остаться и удаление старой таблицы? Так? Или что-то еще быстрее было?
#1 by Diman000
Вот уж не думаю, что сортировка, да еще потом выгрузка в новую ТЗ будет самым быстрым алгоритмом. По-моему классический перебор гораздо быстрее. Тем более, что с очень большими ТЗ с количеством десятками тысяч строк 1Сина ворочается далеко не мгновенно. Самый быстрый алгоритм не помню, всегда перебором делал. А в 8ке с этим стало еще проще.
#2 by Diman000
Вот уж не думаю, что сортировка, да еще потом выгрузка в новую ТЗ будет самым быстрым алгоритмом. По-моему классический перебор гораздо быстрее. Тем более, что с очень большими ТЗ с количеством десятками тысяч строк 1Сина ворочается далеко не мгновенно. Самый быстрый алгоритм не помню, всегда перебором делал. А в 8ке с этим стало еще проще.
#3 by fisher
2 Нифига. Суть была в том, что УдалитьСтроку очень тормознутый метод, и почти любая альтернатива была быстрее. Это я точно помню.
#4 by fisher
2 Ессно, если табличка небольшая или количество удалений минимально, тогда нет никакого смысла заморачиваться. А на больших таблицах с большим количеством удалений ускорение заметное получалось...
#5 by Diman000
Хм, ну тогда может быть с однократной сортировкой и выгрузкой быстрее и получится
#6 by Чучундер
#7 by fisher
2 Ага, я так и думал. Спасибо.
#8 by fisher
2 Оригинальный и быстрый метод получения количества удаляемых строк. Я что-то навскидку не сообразил, уже НайтиЗначение начал присобачивать :)
#9 by Дурочка 1С ®
ТЗ.УдалитьСтроки;
#10 by fisher
2 Не всегда катит. Иногда удаляет те строки, которые должны остаться.
#11 by zzz
Конкурс: самый быстрый вариант удаления ненужных строк из Таблицы Значенийhttp://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=1419
#12 by Мощный
6. Красивый, почти похож на мой, только я реально удалял то кол-во строк, которое получалось, хотя реально строкаТЗдляЧистки.Выгрузить(ТЗРаб);не совсем нужна, соответсвенно и движения с ней в алгоритме11. туда не вошли куда более быстрые алгоритмы2. Даж с 2 сортировками будет куда быстрее на порядок, чем метод посл.перебора
#13 by zzz
2 да ты что! Там очень легко добавляются алгоритмы, приводи цифры замеров своего "МегаАлгоритма".
#14 by Мощный
13. Честно скажу, после диспутов 1.5, 2-х-годовой давности и не смотрел, свой вроде не успел влепить тогда, так что спасибо
#15 by fisher
+ В самом деле, свои алгоритмы легко добавляются и проверяются, в этом-то и состаяла задумка.2 Не думаю, что ты сможешь предложить что-то радикально быстрее уже существующего.Я уже сделал ряд прогонов для своего комбинированного алгоритма, похожего на , но использующего Заполнить, вместо Выгрузить. Это несколько быстрее (идея NS).В общем, выводы такие: извращаться имеет смысл, когда количество строк исчисляется тысячами и удаляется большое количество строк. Иначе эффект несущественнен.Зато уже при количестве строк 20000 алгоритмы подобные дают более чем десятикратный(!) выигрыш производительности (если нужно удалить 50% строк) по сравнению с использованием метода УдалитьСтроку.А при большем количестве строк вообще хана. Судя по тестам, скорость метода УдалитьСтроку зависит от количества строк таблицы, причем весьма неслабо. В этом и проблема. Т.е. чем больше строк в таблице, тем удаление единичной строки методом УдалитьСтроку выполняется все медленнее и медленнее. Возможно это связано и с количеством предыдущих удалений, лень проверять.
#16 by Мощный
15. Так ведь с NS-м вроде мерялись порядками на количестве 5-6 тыщ, не так давно, там дело еще до выгрузки в ДБФ доходило. Что касается операции удаления, так чтоб избежать эффекта предыдущих удалений, можно ж и с конца удалять.. Тоже ведь найтить надо те опыты - та ж лень
#17 by fisher
2 Для тестирования лучше юзать количества поболее, чтобы сгладить погрешности.Пробовал с конца удалять - эффекта нет.
#18 by КонецЦикла
Самый быстрый алгоритм для малого (может около 50 штук) кол-ва строк написан в ТиС :)
#19 by smaharbA
ЗначениеВСтроку
#20 by fisher
2 А про ТЗ и выгрузку в ДБФ помню, NS доказывал, что НайтиЗначение тоже дюже тормознутый метод на больших таблицах и использовал поиск в индексированных ДБФ. Даже с учетом перегрузок в/из ДБФ получалось в разы быстрее. И не он один эти грабли раскапывал. В итоге в 1С++ появился новый класс :)
#21 by Мощный
20. Кажется так - тогда ты должон помнить и оппонента - вроде ж и метод там же был
#22 by smaharbA
ДБФ это хорошо, а если в ТЗ "засели" объекты не 1С, а ?
#23 by fisher
2 Не помню. Но сейчас речь не о поиске, а об удалении строк.
#24 by КонецЦикла
ищет калечно, какая-то линейная зависимость (в зависимости от месторасположения строки) бывает...
#25 by Чучундер
> ТЗдляЧистки.Выгрузить(ТЗРаб);> не совсем нужна, соответсвенно и движения с ней в алгоритмеЭто как можно обойтись?Обрезка таблицы меттодом КоличествоСтрок(нужное) - не использовалась сознательно.
#26 by fisher
2 Ага. И еще какая-то фигня была, если предварительно сортировка использовалась. Чуть ли не того плана, что в отсортированной таблице медленнее ищет, чем в не отсортированной. В общем, намудрили что-то разработчики. Но оно и немудрено, объект достаточно сложный, а на больших объемах данных, судя по всему, его не тестили.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С