c# - 为什么编译器不优化这段代码

标签 c# performance arcgis

我有一个使用第三方工具迭代点集合的代码。

for (int i = 0; i < pcoll.PointCount; i++) { /* ... */ }

通过 dotTrace 进行分析时,我注意到每次迭代都会访问 PointCount-proerty(见上图)

.

我预计此属性的值会被编译器优化掉,但显然这并没有发生。也许这实际上是基于 COM 的第 3 方库中的问题,或者在收集信息时也是 dotTrace self 中的问题。

我不确定这个主题是否更适合 Gis.StackExchange。然而,也许有人知道在什么情况下不会发生优化或如何发生优化。

最佳答案

简单地说,编译器如何知道 pcoll.PointCount 是否会在两次调用之间发生变化?它无法安全地假设该值将保持不变,因此无法通过缓存第一次调用 pcoll.PointCount 的值来优化此代码。

关于c# - 为什么编译器不优化这段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31114252/

相关文章:

c# - 如何在 .net 中获取可用的 wifi AP 及其信号强度?

python - 尝试根据输入创建一个简单的按属性选择的脚本

python - 高性能适用于 group by pandas

performance - 为什么数据结构对齐对性能很重要?

javascript - 使用 ArcGIS javascript api 切换 kml

javascript - 使用搜索小部件/地理编码器限制搜索范围

c# - 计算类计数的部分语法

c# - 从 COM 调用托管 API

c# - C# 匿名函数中变量的作用域

c# - 条件拆分列表或数组(或获取子列表等)