Цитата:
Сообщение от
Zabr
Мы в итоге (спасибо wolfstein) пошли по еще более простому пути - заменили вызов mappingExists_RU на сравнение tableid с перечнем конкретных таблиц. Утечка памяти ликвидирована полностью, скорость разноски тоже немного увеличилась (хотя и не так сильно, как я ожидал).
Хотел сделать нечто подобное. Но вначале решил исследовать поведение функции mappingExists_RU.
Собрал статистику вариантов входных параметров, которые передаются ей на вход.
Для нашего приложения (Ax2009 RU6) их оказалось всего лишь 13 комбинаций. Но самое интересное в том что из всех этих вариантов она
никогда не возвращает "false". Результат всегда один и тот же: "true" !
Возникает вопрос - зачем эта функция вообще нужна ?
к примеру в методе класса SalesPurchReport_Invoice4Paym_RU она используется так
X++:
if (mappingExists_RU(tablenum(CustVendInvoiceJour),
invoiceJour.TableId,
fieldnum(CustVendInvoiceJour, rContractCode)))
Как я понял, "false" она не может вернуть ни при каких вариантах.
так как invoiceJour в этом методе всегда VALUE: map = CustInvoice4PaymJour_RU и никак иначе.
Или я не прав ?
Короче, заменил эту функцию на
Вот и вся оптимизация...