为什么编译器不优化此代码

Him*_*ere 4 c# performance arcgis

我有一个代码使用第三方工具迭代一组点.

for (int i = 0; i < pcoll.PointCount; i++) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

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

.

我预计编译器会优化此属性的值,但显然不会发生这种情况.也许这实际上是基于COM的第三方库中的问题,或者在收集信息时也在dotTrace self中.

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

Dav*_*rno 8

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