在紧凑型框架 3.5 应用程序中优化其中一个较大的表单时,我们注意到在加载包含 lambda 表达式的表单时性能受到显着影响。这仅在以发布模式在设备上运行应用程序时才明显。
当表单包含以下代码时:
foreach (MyObject in objects.OrderBy(x => x.id))
类的基本构造函数的执行时间(取决于硬件)比等效的要长几秒钟:
foreach (MyObject in objects.OrderBy(FunctionPointerInsteadOfLambda))
...
private string FunctionPointerInsteadOfLambda(MyObject obJ) {
return obj.Id;
}
我的理解是 lambda 编译为匿名方法,这将在类的方法槽表中添加一个条目。但是,当包含 lambda 时,加载时间存在如此大的差异。简单地把它放在那里会影响加载时间,即使它没有被调用。这只发生在第一次创建类的实例时。
在第二个示例中,延迟会延迟到实际调用该方法。
我正在努力寻找有关紧凑框架的 CLR 的具体细节,这些细节可以阐明这个问题。