Я работаю над приложением C #, которое позволяет пользователям в основном импортировать таблицы данных, а затем вводить свои собственные формулы на мини-языке для вычисления новых столбцов из базовых данных.
Эти формулы компилируются в деревья выражений LINQ в механизме, которые затем предположительно компилируются в библиотеку деревьев выражений .NET 4.0 в IL, чтобы их можно было выполнить.
Недавно мы начали использовать наш движок для некоторых тикающих данных большого объема, и мы обнаруживаем, что скорость этих скомпилированных деревьев выражений является настоящим узким местом - скорость довольно низкая при пересчете всех этих столбцов на лету. Попадание по нему с помощью встроенного профилировщика Visual Studio 2010 показывает, что половина всего времени выполнения тратится на clr.dll в методе JIT_MethodAccessAllowedBySecurity.
Беглый поиск этой строки ничего не дал, поэтому мне интересно, есть ли там кто-нибудь, кто может сказать мне, что это за метод, и есть ли способ не дать ему съесть все мои циклы? Может быть, есть способ скомпилировать этот код и явно дать ему разрешение делать все, что он хочет, чтобы clr мог остановить эти проверки? Возможно, временные сборки, создаваемые механизмом дерева выражений, не имеют полного доверия?
Во всяком случае, я в значительной степени в растерянности, и мне очень интересно узнать, сталкивались ли другие StackOverflow'еры с этой проблемой в прошлом. Заранее спасибо!