время проведения в зависимости от количества строк в документе
сзкфмн
усовершенствованный механизмнанотехнологии задействовал?
нет, разбиение таблицыТоваров на подтаблицы по 300 строк при проведении по партиям, всеголиш...
гм, было бы логично увидеть что-то монотонное - линейное там, или экспоненциальное, чего график то пидорасит так?
Как ты умудрился сделать время нелинейным?
хрен с ним, с нелинейным, оно же немонотонно даже, это более странно
Как одинэсники сделали его нелинейным и немонотонным в типовой ?
Или тест снимался с продакшн базы, на которой могла быть нагрузка в этот момент ?
характер немонотонности одинаков для обоих тестов - либо они делались одновременно, либо нагрузка при тестировании была идентична (вероятность -> 0 либо немонотонность обусловлена гениальностью алгоритма - буферизация какая-нибудь к примеру
а вы понимаете, что там за алгоритм? Почему он линейным-то должен быть от числа строк?
ну хотя бы монотонным-то он быть должен?
В общем случае не должен, хотя на графике и правда что-то стремное.
если алгоритм обработки базы зависит от количества строк немонотонно, то это скорей всего какой-то херовый алгоритм, который большую часть времени занимается непонятно чем
если алгоритм обработки базы зависит от количества строк немонотонно, то это скорей всего какой-то херовый алгоритм, который большую часть времени занимается непонятно чемтогда весь компьютер - херовая штука, да и любая большая система - херовая.
зы
есть такое понятие как резонансный эффект, когда при совпадении определенных параметров система работает значительно быстрее, чем обычно (когда параметры не совпадают)
например, если начать читать с винта - по 1кб, по 2кб, по 3кб и т.д., то график будет немонотонный, будут ускорения - когда размер блока будет совпадать с размером сектора (единичного пакета читаемого с винта)
также похожий эффект будет при совмещении двух разных алгоритмов.
возьмем, например, сортировку - пока длина массива маленькая, то выгоднее сортировать одним потоком, если массив большой - то в многопоточку.
при этом определить точную грань, с какого момента выгоднее брать второй алгоритм невозможно, и поэтому обычно грань ставят с запасом в пользу более простого алгоритма.
соответственно, если грань стоит, например, в 1000 элементов, то 999 элементов будет сортироваться медленнее, чем 1000
Только вот почему бы, если n+k строчек обрабатываются быстрей, чем n (за счёт лучшего чтения etc) нам бы не считать n+k строчек, а потом отбросить лишние?
Такое возможно, если это позволяет алгоритм
Только вот почему бы, если n+k строчек обрабатываются быстрей, чем n (за счёт лучшего чтения etc) нам бы не считать n+k строчек, а потом отбросить лишние?во-первых: такое предсказание будет достоверным только в полностью детерминированной системе, чем обычно большая система не является.
во-вторых, такое предсказание должна делать сама программа, исходя из условий работы в данном конкретном месте - но предсказывающий код на текущий момент пишут только в редких случаях (т.к. это дорогое удовольствие с точки зрения разработки)
ну ладно шпонгле
Очевидно же, что алгоритм вполне может немонотонно зависеть от кол-ва "строк" своих входных данных.
Например, простейший алгоритм рекурсивного обхода графа линеен по числу вершин и числу ребер графа. Если граф задать списками инцидентности, то кол-во "строк" входных данных будет равно числу вершин. Соответственно, вполне возможен вариант, когда на 100к "строк" алгоритм работает 1 секунду, а на 50к "строк" - 2 секунды.
Шпонгл запостил график зависимости времени от чего-то, для какого-то неведомого алгоритма. А мы тут пытаемся додумать, что он имел в виду. Толкователи Шпонгла, блин.
Тихо, еще чуть-чуть и мы предскажем конец света
Толкователи
Если ТаблицаПоТоварам.Колонки.Найти("ПодразделениеОрганизации") = Неопределено Тогда
ТаблицаПоТоварам.Колонки.Добавить("ПодразделениеОрганизации");
КонецЕсли;
Если ТаблицаПоТоварам.Колонки.Найти("СписанныеПартии") = Неопределено Тогда
ТаблицаПоТоварам.Колонки.Добавить("СписанныеПартии");
КонецЕсли;
Если ТаблицаПоТоварам.Колонки.Найти("ДоговорПоставщика") = Неопределено Тогда
ТаблицаПоТоварам.Колонки.Добавить("ДоговорПоставщика");
КонецЕсли;
Для Индекс = 1 По 3 Цикл
Если ТаблицаПоТоварам.Колонки.Найти("КорСубконтоСписания" + Индекс) = Неопределено Тогда
ТаблицаПоТоварам.Колонки.Добавить("КорСубконтоСписания" + Индекс);
КонецЕсли;
КонецЦикла;
Если ТаблицаПоТоварам.Колонки.Найти("СписыватьПоУказаннойСтоимости") = Неопределено Тогда
ТаблицаПоТоварам.Колонки.Добавить("СписыватьПоУказаннойСтоимости", Новый ОписаниеТипов("Булево";
КонецЕсли;
Если ТаблицаПоТоварам.Колонки.Найти("Себестоимость") = Неопределено Тогда
ТаблицаПоТоварам.Колонки.Добавить("Себестоимость");
КонецЕсли;
колвоСтрок = ТаблицаПоТоварам.количество;
если колвоСтрок>400 тогда
ТаблицаПоТоварам2 = ТаблицаПоТоварам.СкопироватьКолонки;
для каждого с из ТаблицаПоТоварам цикл
сс=ТаблицаПоТоварам2.добавить;
ЗаполнитьЗначенияСвойств(сс,с);
индескСтроки = ТаблицаПоТоварам.индекс(с)+1;
дробь=индескСтроки/300;
если окр(дробь) = дробь или индескСтроки = колвоСтрок тогда
УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров(Заголовок, ТаблицаПоТоварам2, Истина, СтруктураШапкиДокумента.ОтражатьВНалоговомУчетеУСН, Отказ, , СодержаниеПроводки);
для каждого ст из ТаблицаПоТоварам2 цикл //передаем измененную подтаблицу в таблицу..
стт=ТаблицаПоТоварам.найти(ст.номерстроки,"НомерСтроки");
ЗаполнитьЗначенияСвойств(стт,ст);
конеццикла;
ТаблицаПоТоварам2.очистить;
конецесли;
конеццикла;
иначе
УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров(Заголовок, ТаблицаПоТоварам, Истина, СтруктураШапкиДокумента.ОтражатьВНалоговомУчетеУСН, Отказ, , СодержаниеПроводки);
конецесли;
БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯААААААААААААААААААААААААААААААААААААААААААААААа
1с эта пиздец
УправлениеОткатамиПартийныйУчет.ДвижениеПартийОткатов(Заголовок, ТаблицаРасценок, Истина, СтруктураШапкиДокумента.ОтражатьВНалоговомУчетеУСН, Отказ, СажатьВТюрьму, СодержаниеПроводки);
Оставить комментарий
psvpolo
по х - сотни строк, по y- секунды
типовая 1с бп, док - реализация
нижний график - усовершенствованный механизм, вверху - типовой