![]() |
1
12
为什么要
那么它应该和你自制的一样快
你可能想比较一下你的
|
![]() |
2
5
我猜你正在调试器中运行。以下是我使用“/o+/debug-”命令行构建的结果
仍然有轻微的差异,但没有那么明显。迭代器块实现不如量身定制的解决方案高效,但它们相当不错。 |
![]() |
3
4
假设这是一个正在运行的发布版本,否则所有比较都将关闭,因为JIT将无法完全工作。 你可以用 reflector 看看“收益率”声明也在扩展什么。编译器将创建一个类来封装迭代器。也许生成的代码中比Enumerable的实现有更多的内务处理。可能是手工编码的范围 |
![]() |
4
2
Reflector输出略有不同(以及论证检查和额外的内化水平在这里绝对不相关)。基本代码更像是:
也就是说,它们对每个产量应用额外的加法,而不是另一个局部变量。 我试图对此进行基准测试,但我无法阻止足够的外部流程来获得可理解的结果。我还尝试了两次每个测试,以忽略JIT编译器的影响,但即使这样也有“有趣”的结果。 以下是我的结果示例: Run 0: time = 4149; result = 405000000450000000 time = 25645; result = 405000000450000000 time = 39229; result = 405000000450000000 time = 29872; result = 405000000450000000 time = 4277; result = 405000000450000000 time = 26878; result = 405000000450000000 time = 26333; result = 405000000450000000 time = 26684; result = 405000000450000000 Run 1: time = 4063; result = 405000000450000000 time = 22714; result = 405000000450000000 time = 34744; result = 405000000450000000 time = 26954; result = 405000000450000000 time = 4033; result = 405000000450000000 time = 26657; result = 405000000450000000 time = 25855; result = 405000000450000000 time = 25031; result = 405000000450000000 Run 2: time = 4021; result = 405000000450000000 time = 21815; result = 405000000450000000 time = 34304; result = 405000000450000000 time = 32040; result = 405000000450000000 time = 3993; result = 405000000450000000 time = 24779; result = 405000000450000000 time = 29275; result = 405000000450000000 time = 32254; result = 405000000450000000 以及代码
编译与
|
![]() |
Sinatr · 警告-未实现“收集”模式 7 年前 |
![]() |
KDecker · 按完成时间排序任务,同时在参数列表中跟踪其索引? 9 年前 |
![]() |
Gustaf Liljegren · 如何在所有Y对象中获取所有X对象? 10 年前 |