WPF应用程序在第一次交互(如按钮点击)后停顿/冻结。

10

我目前在WPF中遇到了一个问题。UI可以正常加载,但是每当第一个用户交互发生时,例如单击按钮,应用程序似乎会停顿,例如如果我有两个按钮显示一个MessageBox,第一次点击将等待几秒钟然后显示MessageBox,但是任何后续的交互都是瞬间响应的。

还有其他人遇到过这个问题吗?如果是,是否有任何解决方案?

谢谢


如果您使用带有“this”参数引用的重载版本显示消息框,则在关闭消息框之前,它将不允许您执行任何操作。 - user586399
1
我猜这是由于DLL加载的原因,因为.NET仅加载所引用的内容,因此当任何对象的第一个引用发生时,可能会导致延迟。这就是正在发生的事情... - Mohsen Afshin
这可能会对您有所帮助,https://dev59.com/o3A85IYBdhLWcg3wF_cO - Mohsen Afshin
3
我想我已经弄清楚了,它似乎只在调试时才会变慢。如果我在发布模式下构建,并从bin目录中的发布文件夹运行应用程序,则不会出现停顿或延迟。无论如何,感谢您的帮助 :) - Gary Connell
我注意到了相同的行为,但只在64位构建(或64位操作系统上的AnyCPU)调试期间出现。如果从“Bin \ Debug”目录启动调试构建,则可以无延迟运行。只有在IDE中使用F5运行程序时才会出现延迟。 - John Reynolds
2个回答

7

我曾经遇到了同样的问题。每次我从ButtonICommand调用第一个交互时,UI会冻结大约半秒钟。

在作者的提示下,我找到了问题所在,通过直接从文件夹启动应用程序解决了这个问题。但我也想知道为什么会出现这种情况,思考了一下直接执行和调试之间的区别。

我发现是IntelliTrace导致了冻结,因为我曾经激活过它来调试ADO.NET应用程序。禁用后,UI冻结就消失了。要禁用它,请转到“调试”->“IntelliTrace”->“打开 IntelliTrace 设置”->取消选中“启用 IntelliTrace”。


2
我们正在调查此问题,以确定是否可以在将来的Visual Studio版本中解决。与此同时,您可能希望仅禁用“手势”事件,而不是完全禁用IntelliTrace。要执行此操作,请转到“工具->选项-> IntelliTrace-> IntelliTrace事件”,然后禁用“手势”收集。 - Colin Thomsen
谢谢您的回复,Colin。我按照您的指示操作,现在似乎启用了 IntelliTrace 并且可以正常工作了。也许您应该将此作为答案发布,因为它实际上比我的解决方案更好。 - JanW

3
感谢您报告此性能问题。我们已经对其进行了调查和跟踪,并正在考虑在未来的版本中修复此问题。以下是解决此问题的步骤。一旦应用了解决方法,就无需禁用“手势”事件或IntelliTrace。
  1. 以管理员账户打开cmd窗口
  2. cd /d“%programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE\Remote Debugger\x64”
  3. %windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe install /NoDependencies /ExeConfig:.\msvsmon.exe Microsoft.VisualStudio.vil.host.dll
如果您使用的是虚拟机,您可能需要先保存快照,然后再应用解决方法。如果遇到其他问题,请告诉我们。谢谢。
Azeem Khan

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