![](/img/trans.png)
[英]Slow updates with Entity Framework 4.3 and SQL Server Compact Edition 3.5
[英]Loading class with lambda expressions in Compact Framework 3.5 is slow on first load
在紧凑框架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编译成一个匿名方法,这将为该类的方法槽表添加一个条目。 然而,当包括λ时,加载时间存在很大差异。 只要有它就会影响加载时间,即使它没有被调用。 这只发生在第一次创建类的实例时。
在第二个示例中,延迟缓慢直到实际调用该方法。
我正在努力寻找关于紧凑框架的CLR的具体细节,这将有助于解决这个问题。
如果性能延迟是一致的(即在同一硬件上的同一点发生),那么我会将一次性能延迟归因于JIT编译。 虽然不一定方便,但一次性延迟是JIT编译的典型特征。
由于您提到它仅在发布模式下发生,因此另一个考虑因素可能是编译器正在执行一些优化,例如内联,这会触发延迟行为。 测试该理论的一种方法是创建一个禁用优化的发布版本,然后查看问题是否可重现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.