gpt4 book ai didi

c# - 在 Compact Framework 3.5 中使用 lambda 表达式加载类在首次加载时速度很慢

转载 作者:行者123 更新时间:2023-11-30 17:53:13 25 4
gpt4 key购买 nike

在优化紧凑型框架 3.5 应用程序中的一个较大表单时,我们注意到在加载包含 lambda 表达式的表单时性能受到显着影响。只有在设备上以 Release模式运行应用程序时才会注意到这一点。

当表单包含如下代码时:

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 的具体细节,以阐明这个问题。

最佳答案

如果性能延迟是一致的(即发生在同一硬件上的同一点),那么我会将一次性性能延迟归因于 JIT 编译。虽然不一定方便,但一次性延迟是 JIT 编译的典型特征。

既然你提到它只发生在 Release模式下,另一个考虑可能是编译器正在执行一些优化,比如内联,这会触发延迟行为。测试该理论的一种方法是创建一个禁用优化的发布版本,然后查看问题是否可重现。

关于c# - 在 Compact Framework 3.5 中使用 lambda 表达式加载类在首次加载时速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17623909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com