Еще информация для размышлений:
Вот
job для экспериментов
X++:
static void tutorial_Job_getMemAlloc(Args _args)
{
HeapCheck heapHeck = new HeapCheck();
int allocFirst;
Set set1;
Set set2;
Set set3;
int i;
timeOfDay time1;
TmpInventTable tmpIT;
Counter recIdCount;
;
recIdCount = 40000;
allocFirst = heapHeck.bytesAllocated();
info(strfmt("%1 - До заполнения", allocFirst));
time1 = timeNow();
set1 = new Set(Types::Integer);
for (i = 1; i <= recIdCount; i++)
set1.add(i);
allocFirst = heapHeck.bytesAllocated();
info(strfmt("%1 - %2сек - заполнили Set(Types::Integer)", allocFirst, timeNow() - time1));
time1 = timeNow();
set1 = new Set(Types::String);
for (i = 1; i <= recIdCount; i++)
set1.add(strFmt("Item%1", i));
allocFirst = heapHeck.bytesAllocated();
info(strfmt("%1 - %2сек - заполнили Set(Types::String)", allocFirst, timeNow() - time1));
time1 = timeNow();
for (i = 1; i <= recIdCount; i++)
{
tmpIT.ItemId = strFmt("Item%1", i);
tmpIT.insert();
}
allocFirst = heapHeck.bytesAllocated();
info(strfmt("%1 - %2сек - заполнили временную таблицу из одного поля - ItemId", allocFirst, timeNow() - time1));
}
Вот мои результаты: (40000 элементов)
28 939 792 - До заполнения
30 413 632 - 1сек - заполнили Set(Types::Integer)
30 401 280 - 1сек - заполнили Set(Types::String)
32 763 840 - 13сек - заполнили временную таблицу из одного поля - ItemId
Обращу внимание на время, требуемое для заполнения временной таблицы таким большим кол-вом записей. SET заполняется почти мгновенно. (правда у других проверяющих время заполнения меньше для таблицы - видимо это связано с тем, что винт у меня на ноутбуке не очень быстрый)
Оговорка:
Результаты по выделению памяти приблизительные, так как
Цитата:
Сообщение от
AndyD
Память выделяется кусками. Т.е. если объект в памяти занимает меньше места, чем свободно - то выделение не происходит, а размещается в свободном куске
Для небольшого числа записей разница настолько мала, что измерить не удалось
Анализ результатов (краткий):
первые два заполнения - 2 Мб выделилось приблизительно, (на двоих)
на табличку - еще столько же где-то.
Учитывая это и время заполнения, использование временной таблицы ставится под вопрос.
+ большой конечно, что можно ее потом использовать в запросах. Правда и в этом нужно быть осторожным, так как нужно учитывать, где формировалась эта таблица (первая запись).
У кого какие соображения?