Показать сообщение отдельно
Старый 10.12.2009, 16:12   #2  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
очень специфичная утечка.
борюсь с падениями АОС (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. Очень специфично получается.
__________________
--- SHiSHok

Последний раз редактировалось SHiSHok; 10.12.2009 в 16:34.