Показать сообщение отдельно
Старый 06.03.2009, 10:44   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Сделал небольшое наблюдение.

При swapQty = 10000, код
X++:
    IXMLExcelReport report = new CXMLExcelReportEx();
    ;

    for (i = 1; i <= 10970; i++)
    {

        con = connull();
        for (j = 1; j <= 213; j++)
        {
            con += "Некая строка для вывода";
        }
        con += i;

        report.send(con);
    }

    report.show();
валится в момент передачи данных в excel (метод swapBuf)
this.range(curRow,1,curRow+curLines-1,xmlRowBuilder.cols()).value(#xlRangeValueXMLSpreadsheet, xmlRowBuilder.buf());

При этом длина строки buf составила 145705719, что, если я не ошибаюсь, сотсавляет примерно 145 MB !!!
Уменьшение swapQty до 5000 распечатало отчет нормально. Но даже в этом случае на вызов метода range.value ушло несколько секунд.
Есть подозрение, что передача большого объема данных в excel чревато нехорошими последствиями. Буду проверять в 4ке

ps/ знакомая ошибка, кстати Обратная разработка в AX4

psps/ базовый класс оставил со swapQty 1000. На будущее, если строите отчет на основе этих классов, не берите в качестве движка базовый (сам так делал). Создавайте на его основе наследника, и уже его используйте для генерации отчета. Тогда в случае разрастания какого-нибудь отчета в колонках, достаточно будет перегрузить swapQty только на нем.

Последний раз редактировалось Eldar9x; 06.03.2009 в 10:58.