我有一个代码使用第三方工具遍历一个点集合。
for (int i = 0; i < pcoll.PointCount; i++) { /* ... */ }
通过dottrace进行分析时,我注意到每次迭代都会访问
PointCount
-proerty(见上图)是的。
我希望这个属性的值被编译器优化掉,但显然这不会发生。也许这实际上是基于COM的第三方库中的问题,或者在收集信息时也是在DotTrace Self中的问题。
我不确定这个话题是否更适合gis.stackexchange。然而,也许有人知道在什么情况下优化不会发生,或者它是如何发生的。
最佳答案
简单地说,编译器如何知道pcoll.PointCount
是否会在调用之间发生变化?它不能安全地假设值将保持不变,因此无法通过缓存第一次调用pcoll.PointCount
的值来优化此代码。