如果您创建一个针对Microsoft Office Excel 2003的简单“Hello World”VSTO2SE加载项,则在冷启动时加载需要15秒。在此期间,Excel完全没有响应。
Excel 2003中的冷启动时间总是很差。我在Excel 2007中看到了一台启动时间即时的测试机器,但我所有其他测试机器需要15秒才能初始化。 (测试环境 - windows xp pro + VSTO2SE运行时+ XP SP3)
如何改善这种表现?
我已经尝试过的事情没有成功:
Disasble CRL(证书撤销列表)检查 - 这似乎没有帮助,而且我不能指望用户这样做。
使用NGEN创建本机组件 a)似乎Office 2003从不使用本机程序集。 b)我的office 2007测试客户端快速启动,即使使用IL程序集也是如此。 c)即使我知道我的整个依赖树,仍然存在可能没有原生图像的VSTO依赖。
延迟加载加载项 - 这是我从Microsoft获得的解决方法“库存响应”。问题是,我的加载项是从菜单项启动的 - 如何延迟加载加载项仍然可以获取菜单?我可以使用VB6加载项来绘制菜单并通过互操作转发调用,但是为什么我甚至会首先编写VSTO加载项?
编辑 - 是的,这是加载项中“连接”事件的唯一一行。 (实际上是消息框)..消息框出现前需要整整15秒。 - J戴维斯
答案 0 :(得分:1)
你会在冷启动时受到打击,因为它必须首次加载所有程序集。
如果热启动明显加快,那么你唯一真正的选择就是
1)在Windows启动时单独加载程序并在后台加载所有程序集。
2)尝试减少正在使用的装配数量。当然,你不应该使用Hello World。
3)在Excel启动时预加载所有内容。这将损害Excel启动时间,但会使您的菜单选择更快。您也可以在后台预加载所有内容,以帮助实现此目的。
答案 1 :(得分:0)
您是否验证了实际持有量是多少?如果将Debug.Write()语句作为VSTO插件的第一行,是否需要15秒才能显示在调试窗口中?
我们正在使用VSTO,每当我们持有时,它通常不是实际的运行时导致减速。我们通过分离后台线程来解决这个问题,以便在不阻塞主线程的情况下执行缓慢的操作,从而阻止Excel启动。
PS。我们也不是VSTO技术的忠实粉丝。我们100%购买了这个愿景,但实施工作还有很多不足之处。