访问SQL Server数据库的VB.NET应用程序上的ClickOnce性能

时间:2013-01-15 10:28:20

标签: vb.net performance clickonce

我已将60 KLOC Windows VB.NET应用程序升级到VS 2012和Windows 8。 一切都很好看,除非我昨天将它部署到ClickOnce。

如果表单使用绑定,则第一次启动表单时,ClickOnce应用程序加载每个表单的速度都非常慢。如果表单没有使用绑定(但是从数据库查询中选择数据),则表示正常加载。

最有趣的部分是,在VS2012中调试时,它们的加载时间不到1秒。从ClickOnce版本启动时,他们花费超过60秒来加载。

如果我在ClickOnce应用程序中关闭其中一个表单并重新打开它们,它们会在不到1秒的时间内正常加载。

在第一次加载表单时,似乎VS2012中的Binding非常糟糕,但我更倾向于认为我做错了。

关于这个问题的任何想法?

编辑2013/01/18:

在有一天削减不必要的代码之后,我已经找到了一个解决方案,它可以重现缓慢而没有不必要的代码,因此更容易(我希望)找到其中没有正常工作的内容。

ClickOnce应用程序在这里:

http://www.octet.it/Reproduce/

源文件在这里:

http://www.octet.it/Reproduce/Reproduce.zip

我可以说缓慢不依赖于:

  1. SQL Server(我已经删除了访问SQL Server DB的所有代码)。
  2. 绑定(现在根本没有绑定)。
  3. 开发环境:如果您从VS2012运行该应用程序,它将按预期工作。
  4. 复制缓慢的说明:

    • 在Windows 8计算机上安装ClickOnce应用程序(我的是 x64,我没有测试x86。
    • 启动任务管理器。
    • 启动“重播”应用程序。
    • 加载MDI表单后,按[Return]键(这将触发MDIChild表单)。
    • 查看任务管理器,显示“重现”应用程序如何使您的其中一个CPU饱和 机器并占用大约650 MB的RAM。
    • 大约45-60秒后,将出现一个MDIChild表格。
    • 关闭MDIChild表单。
    • 再次按[Return]并看到MDIChild几乎显示出来,任务管理器显示没有CPU饱和或RAM增加

    正如我所说,在Win 8之前,MDIChild(对各种表的绑定和SQL访问)在大约2-3秒内出现。

    源文件不是那么有趣:他们只会显示一个调用MDIChild表单的MDIparent表单,但如果你想做一些实验,我已将它们包含在.ZIP文件中。

    非常感谢你的时间。

    让我知道如何解决这个问题。欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

您是如何编译应用程序的?您是否针对混合平台?尝试定位x86。我有一个类似的问题,在我编译时通过定位x86解决了,除非你的应用程序中有一些疯狂的x64依赖项,否则它应该在你的x64盒子上工作正常。请注意,这将更改clickonce清单,这很令人头疼,但我很好奇这是否可以解决您的问题。