![]() |
#3 |
Участник
|
Как раз искал ответ на этот вопрос.
Провел замеры сам. Во вложении джобики, которыми замерял, примерно такого вида X++: static void testPackSpeed_02(Args _args) { int64 tickFrom; int64 tickTo; int i; // int iMax = 10000; int iMax = 20000; SalesTable salesTable; container con; ; select salesTable order by RecId; //tickFrom = WinAPI::getTickCount64(); tickFrom = WinAPI::getTickCount(); for (i = 1; i <= iMax; i++) { con = salesTable.buf2con(false); // дефолтное поведение в 2012-й } tickTo = WinAPI::getTickCount(); info(strFmt("Способ упаковки salesTable.buf2con(false) время %1 млсек для %2 вызовов. На один вызов %3 млсек", tickTo - tickFrom, iMax, strLRTrim(num2str((tickTo - tickFrom)/iMax, 16, 6, 2, 0)) )); } Сравнивали скорость упаковки такими способами con = salesTable.buf2con(false); con = salesTable.buf2con(true); con = [salesTable]; Global::buf2ConOLD2009(salesTable) и распаковки такими способами salesTable.con2buf(con) Global::con2Buf(con, salesTable); salesTable = Global::con2Buf(con); salesTable = conPeek(con, 1); [salesTable] = con; Global::con2BufOLD2009(con, salesTable); где Global::buf2ConOLD2009 Global::con2BufOLD2009 это методы Global::buf2Con Global::con2Buf взятые из 2009-й код методов такой: X++: static container buf2ConOLD2009(Common common) { container c = [common.TableId]; DictTable dictTable = new DictTable(common.TableId); fieldId fieldId = dictTable.fieldNext(0); DictField dictField; ; while (fieldId) { dictField = new DictField(common.TableId,fieldId); if(dictField.baseType() == Types::Container) c += [common.(fieldId)]; else c += common.(fieldId); fieldId = dictTable.fieldNext(fieldId); } return c; } X++: static void con2BufOLD2009(container c, Common common) { fieldId fieldId; int i; DictTable dictTable; if (common.TableId == conpeek(c,1)) { dictTable = new DictTable(common.TableId); fieldId = dictTable.fieldNext(0); i = 2; while (fieldId) { //common.(fieldId) = conpeek(c,i); common.(fieldId)[1] = conpeek(c,i); // array fix i++; fieldId = dictTable.fieldNext(fieldId); } } } Последний раз редактировалось Logger; 16.02.2017 в 17:57. |
|