代码之家  ›  专栏  ›  技术社区  ›  Robert Fraser

wpf在.NET Framework 4.0中的x64上启动缓慢

  •  35
  • Robert Fraser  · 技术社区  · 15 年前

    我注意到,如果我为任何CPU/x64构建WPF应用程序,那么启动(大约20秒)或加载新控件的时间要比在x86上启动(在版本和调试模式下,在vs内部或外部)长得多。即使是最简单的WPF应用程序也会发生这种情况。问题讨论在 this MSDN thread ,但没有提供答案。这种情况只发生在.NET 4.0上——在3.5 SP1中,X64的速度和x86一样快。有趣的是,微软似乎知道这个问题,因为VS2010中一个新的WPF项目的默认值是x86。

    这是一个真正的错误还是我只是做错了?

    编辑: 可能与此相关: Slow Databinding setup time in C# .NET 4.0 . 我大量使用数据绑定。

    1 回复  |  直到 9 年前
        1
  •  70
  •   Josh    15 年前

    实际上,WPF应用程序的默认项目类型是x86有两个主要原因。

    • IntelliTrace调试只适用于x86,如果默认的项目模板不适用于它们的一个星型功能,这看起来会很糟糕。
    • 许多开发人员仍然不知道他们的anycpu exe将在64位计算机上以x64的形式运行,他们惊讶地发现他们所依赖的32位dll不存在于64位变体中,如OLEDB驱动程序、某些本机dll等。

    至于你正在经历的创业时间问题,这似乎是恩根的问题。由于X64和X86进程有不同的NGEN缓存,可能需要重建或更新64位NGEN缓存。尝试从提升的命令提示符运行以下命令:

    CD C:\Windows\Microsoft.NET\Framework64\v4.0.30319
    NGEN update
    

    这是为已标记为NGEN的程序集重新生成本机映像的命令。如果程序集不在GAC中,那么它也可能对您的应用程序进行ngen没有任何好处,因此我不会费心尝试这样做。但是框架程序集、工具箱程序集等都应该是ngen'd。

    (顺便说一句,当我运行上面关于无法加载的程序集的命令时,确实收到了一些错误。它主要是SQL和Visual Studio程序集。)