Однако это указывает на то, что если ваше выражение будет более сложным, даже в режиме релиза будет существенная разница.

уFunc<> создан изExpression<Func<>> через .Compile () значительно медленнее, чем простоFunc<> заявлено прямо?

Я только что изменился с использованиемFunc<IInterface, object> объявлено непосредственно одному созданному изExpression<Func<IInterface, object>> в приложении, над которым я работаю, и я заметил, что производительность снизилась.

Я только что сделал небольшой тест, иFunc<> созданный из выражения занимает «почти» вдвое больше времениFunc<> объявлено напрямую.

На моей машине прямойFunc<> занимает около 7,5 секунд иExpression<Func<>> занимает около 12,6 секунд.

Вот тестовый код, который я использовал (под управлением Net 4.0)

// Direct
Func<int, Foo> test1 = x => new Foo(x * 2);

int counter1 = 0;

Stopwatch s1 = new Stopwatch();
s1.Start();
for (int i = 0; i < 300000000; i++)
{
 counter1 += test1(i).Value;
}
s1.Stop();
var result1 = s1.Elapsed;



// Expression . Compile()
Expression<Func<int, Foo>> expression = x => new Foo(x * 2);
Func<int, Foo> test2 = expression.Compile();

int counter2 = 0;

Stopwatch s2 = new Stopwatch();
s2.Start();
for (int i = 0; i < 300000000; i++)
{
 counter2 += test2(i).Value;
}
s2.Stop();
var result2 = s2.Elapsed;



public class Foo
{
 public Foo(int i)
 {
  Value = i;
 }
 public int Value { get; set; }
}
Как я могу вернуть представление?

Есть ли что-нибудь, что я могу сделать, чтобы получитьFunc<> создан изExpression<Func<>> выступать, как заявлено напрямую?

Ответы на вопрос(6)

Ваш ответ на вопрос