Снова "пузами меряемся"? (С) на метафору - Андрей Гринев



Posted by Аркадий Водяник on July 13, 1999 at 05:06:41:

In Reply to: Акцент-бухгалтерия 6.0. Сравнение скорости исполнения отчетов ФБП, 1С posted by \Алексей Тишкин on July 13, 1999 at 00:54:30:

До чего же фирма Impact и ee соратники возбужденно реагируют на слово "миллион".
Уже в свое время состоялась дискуссия с вашим шефом Андреем Гриневым, которую пришлось
даже удалить (остатки в виде заголовков еще можно видеть) - на личности переходить начали.
Давайте хоть сейчас без этого обойдемся. Поэтому: Алексей, пожалуйста, воздержитесь от
слов "полная бессмыслица" и т.д. Еще: у нас принято, по возможности, указывать свой E-mail.
В другой раз укажите, хорошо?

Итак, к делу.

1) Я полностью согласен с Вами, Алексей, что "Запрос может выполняться 1
секунду, а сама форма отчета заполняться 30 минут из-за большого количества информации."

2) Мне очень приятно, что на таком пустяковом тесте наш Сервер уверенно превзошел
MS VB Script (этот VB - он не совсем интерпретатор, там тоже есть промежуточный код).
Ведь получилось так: Цитирую Ваше сообщение:

Компьютер AMD K5-133 RAM 16, Win95 < 10c
Компьютер Celeron 333, RAM 32, Win95 < 3c

У Сергея Васеленко же: Сервер 3.04: 3.5с на машине P150, 24М.
А у меня в моем сообщении еще круче: Сервер 3.04: всего 1.5 с на машине P233.
Это, по моему, в три-четыре раза лучше Ваших данных.

На выходящее из ряда вон число 35с (или, в других условиях, 1 мин) для DOS-версии особо
смотреть не стоит: это с лихвой компенсируется Windows-версией (16-ти разрядной, кстати): 8 с.

3) Ну а теперь я попробую Вас озадачить "большим количеством информации".
Снова в ход пойдет миллион:

Пример первый (профиль + исходный текст); кстати, а в Акценте(ТМ) есть встроенный Профилер?
Думаю, что нет.


Количество выполнений: 1
На это количество выполнений потpебовалось 54089 мс = 100%
Распpеделение вpемени по стpокам исходного текста в относительных %, и мс:

1.1% 613|0001 for i=1 to 1000000
################### 97.7% 52834|0002 fact f i*i,i % 1000
1.2% 637|0003 endfor
~ ~|0004
~ ~|0005 rewind facts
~ ~|0006 X=0
~ 5|0007 total f ?X, 0
~ ~|0008 $=X

Что здесь делается? Во первых, в строках 1-3 создается лента фактов из 1000000 фактов.
В данном случае, эту ленту можно считать таблицей из двух столбцов и 1000000 строк.
Первый элемент каждой строки - квадрат ее номера, второй - модуль номера по 1000 - т.е.
он иногда принимает значение 0. На создание этой таблицы ушло 53с.
В строке 5 делается отбор всех фактов, у которых во втором поле 0 - их 1000 штук.
В отобранных фактах суммируются значения первых полей. Так вот, на этот отбор и суммирование
ушло примерно 5мс. ВСЕГО ПЯТЬ МИЛЛИСЕКУНД!!! Машина - PII 233 128 Mb (не та, что в моих
предыдущих опытах). Включен режим "быстрые факты".

Конечно, же, нет у вашей программе столь изощренного инструмента. В качестве аналога
предлагаю потестировать следующее (эквивалент предыдущего пример - через массивы):
Снова профиль:


Количество выполнений: 1
На это количество выполнений потpебовалось 15159 мс = 100%
Распpеделение вpемени по стpокам исходного текста в относительных %, и мс:

3.2% 478|0001 for i=1 to 1000000
##### 27.3% 4134|0002 [a i,i*i]
####### 39.0% 5909|0003 [b i,i % 1000]
2.4% 368|0004 endfor
~ ~|0005
~ ~|0006 X=0
3.4% 520|0007 for i=1 to 1000000
#### 22.4% 3393|0008 if [b i] = 0
~ 5|0009 X=X+[a i]
~ ~|0010 endif
2.3% 352|0011 endfor

Легко видеть, что на тот же поиск и суммирование ушло почти в тысячу раз больше
времени! Ну-ка, что у Вас получится? Можете присоединить SQL-сервер чтобы "улучшить" результаты.




Пpишедшие ответы: