Почему JIT_MethodAccessAllowedBySecurity так принимает много времени?

Я работаю над приложением C #, которое позволяет пользователям в основном импортировать таблицы данных, а затем вводить свои собственные формулы на мини-языке для вычисления новых столбцов из базовых данных.

Эти формулы скомпилированы в деревья выражений LINQ в движке, которые затем предположительно компилируются в IL, чтобы их можно было выполнять, библиотека дерева выражений .NET 4.0.

Недавно мы начали использовать наш движок для некоторых больших объемов тиковых данных, и мы Мы обнаруживаем, что скорость этих скомпилированных деревьев выражений является настоящим узким местом - скорость довольно мала при пересчете всех этих столбцов на лету. Попадание по нему с помощью встроенного профилировщика Visual Studio 2010 показывает, что половина всего времени выполнения тратится на clr.dll в методе JIT_MethodAccessAllowedBySecurity.

Беглый поиск этой строки ничего не дал, так что я интересно, есть ли там кто-нибудь, кто может сказать мне, что это за метод, и есть ли способ не дать ему съесть все мои циклы? Может быть, есть способ скомпилировать этот код и явно дать ему разрешение делать все, что он хочет, чтобы clr мог остановить эти проверки? Возможно, временные сборки, создаваемые механизмом дерева выражений, не имеют полного доверия?

В любом случае, я в значительной степени растерялся, и мне очень интересно узнать, сталкивались ли другие StackOverflow'еры с этой проблемой в прошлое. Заранее спасибо!

9
задан lvilnis 30 March 2011 в 20:18
поделиться