我为 ESRI ArcEditor 编写了一个插件,可以在道路网络上运行一些验证检查。为了检查规则是否都满足,它基本上做了一大堆不同的相交,在选定的特征上进行一些缓冲和包络等。
它是用 C# 编写的。
现在我注意到的是,在选定的特征上运行给定的算法确实需要很长时间。我加载了 ANTS 分析器并优化了瓶颈,直到我无能为力为止。
我注意到的一件奇怪的事情是,ANTS 在时间线上几乎没有报告 CPU 使用率——一条平坦线。然后,我在验证操作运行时使用任务管理器验证了处理器保持在大约 10% 到 15% 以下。这对我来说毫无意义。为什么它不使用可用的处理器周期?
没有 I/O 发生,因为它从 ArcSDE 加载所有内容。我还验证了在验证过程中没有明显的网络流量,认为它可能正在等待 ArcEditor 和服务器之间的通信。然后我检查了服务器上的处理器,以确保没有任何处理被委派给它,但它的 CPU 使用率在验证过程中保持稳定在 1%。
然后我认为 ArcEditor 可能会抑制它的插件可以运行的优先级,或者类似的东西。所以我插入了一个数学运算,它将在大约 10 秒内使 CPU 最大化,而不是验证例程,它就是这样做的。CPU 使用率稳定在 50% 以上,这是有道理的,因为数学运算将最大限度地利用我的 Core 2 Duo 的一个内核。所以那里没有运气。并且有超过 1GB 的 RAM 可用。
最后,我一直试图找到 perfmon 的问题,但在那里没有运气。没有太多经验,但找不到任何问题。
是因为 ArcObjects COM 接口吗?尽管我也使用 perfmon 检查了 .NET Interop 计数器。
我很茫然。
因此,任何帮助或提示将不胜感激。