борюсь с падениями АОС (ax3sp3cu1 +khf), уже перелопатил кучу кода где возможны бока. Утечка памяти в указанном примере имеет место быть, НО только на null курсоре. поясняю тестовым классом:
X++:
static void Job_TEST_Mem(Args _args)
{
SalesLine salesLine, sl;
;
select salesLine;
test::JobMemoryLeakage(); // A
print("JobMemoryLeakage() - done");
pause;
test::testSalesLine(null); // B грызет память
print("testSalesLine(null) - done");
pause;
test::testCommon(null);
print("testCommon(null) - done");
pause;
test::testSalesLine(sl);
test::testCommon(sl);
sl.CurrencyCode = 'UAH';
test::testSalesLine(sl);
test::testCommon(sl);
sl.initFromSalesLine(salesLine);
test::testSalesLine(sl);
test::testCommon(sl);
}
класс TEST
X++:
static server void testSalesLine(salesLine _salesLine)
{
SalesLine slOrig;
int i;
;
while (i <= 30000)
{
i++;
slOrig = _salesLine.orig();
}
}
X++:
static server void testCommon(Common buffer)
{
common orig = buffer.orig();
int i;
;
while (i <= 30000)
{
i++;
orig = buffer.orig();
}
}
X++:
static server void JobMemoryLeakage()
{
SalesLine sl, slOrig;
int i;
;
while (i <= 30000) // A.1 грызет память
{
i++;
slOrig = sl.orig();
}
print("JobMemoryLeakage - null cursor" );
pause;
sl.LineNum =1;
while (i <= 30000) // не грызет память
{
i++;
slOrig = sl.orig();
}
print("JobMemoryLeakage - not null cursor" );
pause;
}
Утечка памяти наблюдается (открываем taskmgr или processExplorer и смотрим) в случае
A.1 и
B. Очень специфично получается.