【问题标题】:WPF application slow on startupWPF 应用程序启动缓慢
【发布时间】:2010-11-08 08:55:37
【问题描述】:

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

当我在某些计算机(WinXP SP2)上进行测试时,我检测到启动时间超过了 15 秒。他们都在我们的领域。

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

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

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

我一直在检查Improving WPF applications startup time,但我的问题似乎需要一种不同的方法。有谁知道会发生什么?

【问题讨论】:

  • 你是如何部署到你的测试机器上的,你在使用 ClickOnce 吗?
  • 我部署的只是将 .EXE 和 WPFToolkit.dll 复制到一个文件夹中。我已经尝试在 GAC 中安装 .DLL,但结果是一样的。
  • 受此影响的不仅仅是 WPF 应用程序。它是任何加载 Code Signed/Authenticode 程序集的 .Net 应用程序(不同于强名称签名)

标签: wpf windows-xp


【解决方案1】:

它是否以某种方式打开文件或在网络中交互?因为如果没有,我建议您是否登录到域或以本地用户身份运行可能是一个红鲱鱼。

您是在调试模式还是发布模式下构建?如果您还没有尝试发布模式,那么值得尝试一下,因为在调试中运行会执行大量额外的错误检查..

【讨论】:

  • 应用程序没有以任何方式与网络或数据库交互。它只是打开一个包含一些控件的表单。我正在发布模式下构建。谢谢。
【解决方案2】:

您是否检查过是否有任何域策略会影响这种情况?

【讨论】:

    【解决方案3】:

    系统是否连接到网络,但由于未配置代理而无法访问互联网?如果是这样,请转到 Internet 设置(即 Internet Explorer 属性)、高级,然后在树视图中查看安全性和“检查已撤销的证书”之类的复选框(我使用的是德语 Windows,所以我没有英文标签在手)。取消选中并再次测试。

    如果这解决了问题,您有一个不是来自 Microsoft 的已签名程序集,.NET Framework 将检查其撤销,并在 15 秒后超时。如果您禁用检查或正确配置互联网连接,则无需等待。

    【讨论】:

    • 这是一个很好的答案!它解决了问题!将运行此应用程序的计算机将无法访问 Internet。非常感谢!
    • 很好的建议。但这可以在其他地方配置,而不是在 IE 连接设置中?例如,我的意思是每个应用程序。
    • @Nelson Reis:我们在将应用程序安装到无法访问 Internet 的 VM 时遇到了问题。有趣的是,如果您拔下以太网电缆(即在 VMWare 中断开以太网设备),它可以正常工作,因为系统会识别出无法访问 Internet。 @Magnus Johansson:不幸的是,我不知道。这对我们来说不是主要问题,因为该问题不会出现在现场系统上。也许有一个组策略设置,因此您可以为您的公司推出它,但我没有找到任何关于仅为应用禁用它的信息。
    • 除此之外,如果我没记错的话,如果在安装过程中可以访问 Internet(即在将签名程序集安装到 GAC 时),它将在此时检查并且在启动应用程序时不会打扰,即使您稍后断开连接。
    • @Magnus Johansson:在下面查看我的答案。无需更改计算机中的任何配置即可解决问题。
    【解决方案4】:

    我在documentation from Microsoft 中找到了解决此问题的另一种方法。

    在app.config文件中加入如下配置也能解决问题:

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

    这样,您无需更改计算机配置。这只是应用程序的配置。

    更新:
    似乎 .NET 4.0 解决了这个问题,如 MSDN 上的 here 所述。

    【讨论】:

    • 似乎是解决方案,但对我来说,从文档中不清楚这是否仅禁用撤销检查或其他检查。
    • 是的,你是对的。现在我有这两个选择。也许稍后我会尝试检查有关此的更多信息。
    • .Net 4.0 及更高版本不再需要这个,根据msdn.microsoft.com/en-us/library/bb629393(v=vs.100).aspx
    【解决方案5】:

    我仍然有这个问题(.NET 4.5)。我的问题是,计算机没有连接到互联网,但还有一些其他设备(相机等)通过 GigE 连接。每个 .NET 应用程序的启动都会延迟大约 20 秒。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多