WPF应用程序启动缓慢

20

我的WPF应用程序目前只显示一些控件,它不连接到数据库或具有任何其他功能。这是一个简单的UI屏幕。

当我在一些计算机(WinXP SP2)上进行测试时,我发现启动需要超过15秒。它们都在我们的域中。

我拿了一台类似的电脑,只安装了Windows,应用程序启动只需要2秒钟。

然后我将计算机添加到我们的域中,并使用域用户进行测试,结果也需要15秒才能启动。我再次使用之前的用户(本地用户)进行测试,它仍然很快。我创建了另一个本地用户,但它和域用户一样需要15秒。 我添加了其他本地用户,但它们也很慢。

总结:应用程序在只有一个用户时启动速度很快(2秒),第一个我测试的用户。所有其他用户(域或本地)都很慢(15秒)。

我一直在查看改善WPF应用程序启动时间,但我的问题似乎需要不同的方法。有人能想出可能发生了什么吗?


你是如何部署到测试机器的?你使用ClickOnce吗? - Oskar
我只是将.EXE和WPFToolkit.dll复制到一个文件夹中进行部署。我已经尝试将.DLL安装到GAC中,但结果仍然相同。 - Nelson Reis
3
不仅 WPF 应用程序会受到影响,任何加载经过代码签名/身份验证的程序集(与强名称签名不同)的 .Net 应用程序也会受到影响。 - Lars Truijens
5个回答

18

我在Microsoft的文档中找到了解决这个问题的另一种方法。

将以下配置添加到app.config文件中也可以解决这个问题:

<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/> 
    </runtime>
</configuration>

这样,你就不需要更改计算机配置。只需配置应用程序即可。 更新:
似乎.NET 4.0已经解决了这个问题,如MSDN here中所述。

似乎这是解决方案,但从文档中我不清楚它是否仅禁用了吊销检查,还是其他检查也被禁用了。 - OregonGhost
是的,你说得对。目前我有这两个选项。也许以后我会尝试查找更多关于此事的信息。 - Nelson Reis
2
根据http://msdn.microsoft.com/en-us/library/bb629393(v=vs.100).aspx,.Net 4.0及更高版本不再需要这个。 - Lars Truijens

12

系统是否连接到网络,但因代理未配置而无法访问互联网?如果是这样,请前往Internet Settings (即Internet Explorer Properties),选择高级选项,并在树形视图中查找安全性以及类似于“检查吊销证书”的复选框(我使用的是德语Windows,所以没有英文标签)。取消勾选并重新测试。

如果问题得到修复,则说明您有一个已签名的程序集不是来自Microsoft,.NET Framework将检查其吊销情况并在15秒后超时。如果禁用检查或正确配置网络连接,则无需等待。


2
这是一个很好的答案!它解决了问题!将运行此应用程序的计算机将无法访问互联网。非常感谢! - Nelson Reis
很好的建议。但是这个设置可以在其他地方配置吗,而不是在IE连接设置中?例如,我是指每个应用程序。 - Magnus Johansson
1
@Nelson Reis:我们在将应用程序安装到没有互联网访问权限的虚拟机时遇到了问题。有趣的是,如果拔掉以太网电缆(即在VMWare中断开以太网设备),它就可以正常工作,因为系统会识别到无法连接到互联网。@Magnus Johansson:很遗憾,我不知道。这对我们来说不是一个主要问题,因为该问题不会出现在现场系统中。也许有一个组策略设置,可以为您的公司推出它,但我没有找到有关仅针对该应用程序禁用它的任何信息。 - OregonGhost
此外,如果我没记错的话,在安装时如果有互联网访问(即在将已签名程序集安装到全局程序集缓存时),它会在那个时候检查,而不会在后来启动应用程序时打扰你,即使你之后断开连接。 - OregonGhost
@Magnus Johansson:请查看我下面的答案。它将解决问题,而无需更改计算机中的任何配置。 - Nelson Reis
@OregonGhost:我发现你可以更改应用程序的配置来克服这个问题。虽然你的回答对我非常有帮助。谢谢。 - Nelson Reis

0

它是打开文件还是以某种方式与网络交互?如果不是的话,我建议无论您是否已登录到域或作为本地用户运行,这可能都是一个误导。

您是在调试模式还是发布模式下构建?如果您还没有尝试过,请尝试发布模式,因为在调试模式下会进行大量额外的错误检查。


该应用程序不以任何方式与网络或数据库进行交互。它只是打开一个带有一些控件的表单。我正在发布模式下构建。谢谢。 - Nelson Reis

0
你有检查是否存在可以影响此情况的域策略吗?

0

我曾经遇到过这个问题(.NET 4.5)。在我的情况下,问题是电脑没有连接到互联网,但是有一些其他设备(相机等)通过GigE连接。每个.NET应用程序的启动都会延迟约20秒。

解决方案非常简单:只需将计算机连接到互联网一次,启动任何.NET应用程序(第一次启动大约需要7秒),之后,即使计算机不再连接到互联网,每次启动也都非常快。此外,我还必须禁用协议TCP/IP V6(导致3-5秒的延迟)。

另一个可能的解决方案是选择“Internet协议版本4(TCP / IPv4)”的属性,然后选择“高级”,选择“WINS”选项卡,并设置“禁用TCP / IP上的NetBIOS”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接