Имя: Пароль:
1C
1C 7.7
v7: Сортировка список значений vs таблица значений
0 dk
 
14.07.16
13:10
тестирую скорость обработки и наткнулся на странные тормоза
оказалось тормозит сортировка списка значений
Обработка работает с большими наборами данных - в списке значений около 100 тыс записей
Решил замерить скорость

//*******************************************
Процедура СформироватьСЗ()

    СЗ = СоздатьОбъект("СписокЗначений");
    Для Сч = 1 По 100000 Цикл
        СЗ.ДобавитьЗначение(_GetPerformanceCounter()%(100000+1));
    КонецЦикла;
    
    Сообщить("Список значений");
    Сообщить("Старт: " + ТекущееВремя());
    СЗ.Сортировать(-1);
    Сообщить("Финиш: " + ТекущееВремя());
    
    
КонецПроцедуры

//*******************************************
Процедура СформироватьТЗ()

    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Зн", "Число", 15, 0);
    Для Сч = 1 По 100000 Цикл
        ТЗ.НоваяСтрока();
        ТЗ.Зн = _GetPerformanceCounter()%(100000+1);
    КонецЦикла;
    
    Сообщить("Таблица значений");
    Сообщить("Старт: " + ТекущееВремя());
    ТЗ.Сортировать("Зн-");
    Сообщить("Финиш: " + ТекущееВремя());
    
КонецПроцедуры

Итог:
ТЗ меньше секунды сортируется
СЗ около 10 минут
1 HawkEye
 
14.07.16
13:11
(0) продолжай наблюдение
2 VladZ
 
14.07.16
13:13
(0)  Что у тебя там за данные? Пересчитываешь звезды во вселенной?
3 dk
 
14.07.16
13:14
Удаляю строки из еще большей таблицы значений - там под 200 тыс записей
4 VladZ
 
14.07.16
13:15
(3) А исходная что содержит?
5 dk
 
14.07.16
13:18
остатки товаров нескольких разрезах
6 VladZ
 
14.07.16
13:18
Вопрос к тому, что 1С не предназначена для таких объемов данных.  Возможно, вам нужно пересмотреть алгоритм задачи. Либо, как вариант, для больших объемов данных использовать внешние базы данных.
7 dk
 
14.07.16
13:19
)))
8 VladZ
 
14.07.16
13:21
Для больших объемов можно посоветовать связку 1С++ и MS SQL.
9 dk
 
14.07.16
13:21
уже
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший