注册表读取随时间而变慢

时间:2019-04-10 08:57:58

标签: vb.net crystal-reports registry

我的.NET Framework 4.0应用程序使用Crystal Reports for .NET。在一个生产环境中,报告加载速度很慢,我遇到了问题。当应用程序运行时,报告的加载方式与其他安装一样,但是几天后它们会变慢。大约一周后,加载所需的时间比原本要长大约10秒。经过一番调查后,我使用ProcessMonitor进行了采样,结果表明问题出在读取注册表。在加载Crystal Reports时,它将读取HKEY_CLASSES_ROOT(或HKCR)以获取所有文件扩展名。当应用程序运行一周时,该部分比启动后要慢得多。我有2个屏幕截图,向您展示了它们之间的区别。

下面的屏幕快照显示了读取的快照。该块中的一天中的时间告诉我,读取所有这些行大约需要30.14毫秒。听起来还不错,但是让我们看一下下一个屏幕截图。 Slow registry before application restart

这是应用程序重新启动后的屏幕截图。无需重启系统!只有应用程序本身已关闭并重新启动。读取所有这些行大约需要0.42毫秒。快70倍! Normal registry after application restart

屏幕截图仅显示27行读取。实际读取次数超过9000次。这就是为什么我的应用程序花费比平均时间长10秒钟的原因。

值得一提的是,虽然发生此问题,但CPU的峰值是1或2个线程。我没有发现任何有关内存泄漏的证据。问题可能出在Crystal Reports对读取的数据进行处理,但未在ProcessMonitor上显示。

那么这里发生了什么?注册表是问题的根源,还是Crystal Reports做错了事?

0 个答案:

没有答案
相关问题