C# WPF首次启动非常缓慢

4

我被建议创建一个简单的WPF应用程序,其中包含一个按钮来检查性能问题。在像样的机器上,仅第一次事件启动就会非常慢。

我已经使用发布模式优化构建了可执行文件,但第一次运行需要约15秒钟,磁盘IO在此期间很高。第二次运行速度更快,不到1秒钟。

我认为这太耗时间了...

我添加了一个名为app1.config的文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <generatePublisherEvidence enabled="false"/>
  </runtime>
</configuration>

app1不是应用程序的名称.. 但是这并没有帮助...

有什么想法怎么做?


1
可能是WPF应用程序启动缓慢的重复问题。 - dthorpe
2个回答

4

在某些机器上,如果您自开机以来从未运行过WPF应用程序,那么应用程序启动可能会很慢。您可以通过在启动文件夹中运行任何WPF应用程序(无需显示窗口--只需引用一个)来添加“快速启动”。这将确保.NET Framework完全加载并使您的应用程序加载更快,尽管这会稍微减慢开机速度。


1
这是一个不错的想法... 但有点过度设计了.. 想象一下每个应用程序都这样做。 - GorillaApe
你只需要一个能够实现这一点的应用程序,每个WPF应用程序都将加载得更快。许多应用程序使用这种方法——例如Java、Microsoft Office、VMWare等等。我们在商业应用程序中使用了这种方法,因为正如你所描述的那样,但我们是在服务中实现的。 - Ed Bayiates
1
虽然这并不是最好的解决方案,但我们已经与微软会面讨论过了,他们应该提供官方解决方案。特别是当你使用在服务上下文中运行的框架时,这是一个问题,因为没有人会在那个上下文中运行WPF,所以第一次可能需要很长时间。 - Ed Bayiates
我编写了一个程序,它简单地将GAC中的所有程序集加载到内存中,以便所有程序都可以从中受益。但是,这样做会很容易占用500 MB的RAM,并导致大量内存被交换回磁盘。我真的不确定这是否是一个好的方法... - Thomas Weller
@Thomas W,那不是一个好的方法。GAC中的许多程序集只在很少的情况下需要使用,如果GAC中有足够的程序集,这样的程序可能会使用超过500 MB的RAM。加载显示窗口所需的.NET框架部分使用的内存要少得多,并且加载几乎肯定会经常使用的程序集。 - Ed Bayiates
显示剩余4条评论

0

你可以尝试使用 NGen 来加速应用程序的首次运行。


NGEN 只会提供非常微小的速度提升。大部分问题是由于 .NET 框架尚未加载。请注意,当他再次运行程序时,速度会更快,但 JIT 仍然需要再次运行。 - Ed Bayiates

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