我有一个使用第三方工具迭代点集合的代码。
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/