Показать сообщение отдельно
Старый 21.12.2011, 13:48   #15  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от 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 и никак иначе.
Или я не прав ?

Короче, заменил эту функцию на
X++:
return true;
Вот и вся оптимизация...