c# – 如何调试缓慢的Office应用程序interop构造函数?
我有一个处理excel的应用程序.最近我遇到一个非常慢的创建Excel对象的问题.
我用这个简单的代码重新创建了这个问题: Microsoft.Office.Interop.Excel.Application xlApp; xlApp = new Microsoft.Office.Interop.Excel.Application(); 第二行导致延迟. 为了测量新对象分配所需的时间,上述代码已经通过时间跟踪解决方案进行了扩展,其结果是决定性的.在正常情况下,上述代码在0.5秒内执行,而在FAULTY-BEHAVIOR的情况下,最多可能需要5分钟. 没有内存泄漏,excel对象被正确释放.我的解决方案一年一整年都没有任何问题.我不确定是否重要,但应用程序在20个单独的用户会话(服务器机器)上运行.所以这个应用程序有20个副本同时运行,可能会导致同时运行的Excel的20个副本. 首次在2个月前注意到这个问题,并已通过Office(2010 – > 2013)的升级解决.这一次我有更多的时间来调查,悲伤的结果并不乐观. 事实: 目前只有一台机器受到这个问题的影响(24个cpu内核,24GB的Ram) 主要问题: >有没有办法调试这个Microsoft.Office.Interop.Excel.Application()构造函数来查看哪个部分是一个问题? 外部内容 > One guy with similar issue. His solution didn’t help with my problem at all. 编辑 – 附加测试 PowerPoint构造函数不受延迟的影响 ppApp = new Microsoft.Office.Interop.PowerPoint.Application(); 解决方法
我自己找到了解决方案.我会发布,因为别人可能会遇到类似的问题,它可以节省他几小时/几天的调查.
我做了什么找到解决方案? 我已经使用Process Monitor分析了测试应用程序(基本上只有一行新的excel应用程序被创建),并没有显示任何重要的东西.然后我重新分析了新开始的Excel过程.它突出显示了Windows注册表的大量读数 HKEY_USERSS-1-5-21-2929665075-1795331740-364918325-1024SoftwareMicrosoftOffice15.0ExcelResiliencyDocumentRecovery 在以上位置,我发现了数以万计的钥匙.它们都是由Excel的“自动恢复”功能创建的.由于数字,启动新的Excel对象时加载它们需要大约40秒.这个数字另外被另外10-20个同时加载的会话乘以(我提到我的应用程序是在20个用户会话上运行的吗?). 解: 为什么所有这些“自动恢复”条目首先在那里?我想我没有很好地处理Excel的关闭,并且“认为”我正在定期崩溃和“尝试”来帮助. 现在剩下的是阻止它再次发生.我将仔细看看我的ExcelClose()函数. 感谢您的关注 – 阿德里安 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |