【问题标题】:WPF Application stalls/freezes after first interaction, like button clickWPF 应用程序在第一次交互后停止/冻结,例如单击按钮
【发布时间】:2012-10-04 20:20:03
【问题描述】:

我目前在 WPF 中遇到问题。 UI 加载正常,但是每当进行第一次用户交互时,例如单击按钮,应用程序似乎停止运行,或者例如,如果我有两个显示 MessageBox 的按钮,第一次单击将等待几秒钟然后显示MessageBox,但任何后续交互都是即时的和响应式的。

有其他人经历过吗?如果有,有什么解决办法吗?

谢谢

【问题讨论】:

  • 如果您使用带有参数this refrence 的重载版本显示消息框,则在关闭消息框之前将不允许您执行任何操作。
  • 我猜这是因为 DLL 加载,因为 .NET 只加载引用的内容,所以当任何对象的第一次引用发生时,可能会导致延迟。这就是发生的事情......
  • 这可能对你有帮助,stackoverflow.com/questions/2947118/…
  • 我想我已经弄清楚了,它似乎只是在调试时很慢。如果我构建发布并从 bin 目录中的发布文件夹运行应用程序,则不会发生停顿或延迟。无论如何感谢您的帮助:)
  • 我注意到了相同的行为,但仅在调试期间出现在 64 位构建(或 64 位操作系统上的 AnyCPU)中。如果从 Bin\Debug 目录开始,调试构建将立即运行。只有在 IDE 中按 F5 运行程序时才会出现延迟。

标签: c# wpf performance buttonclick intellitrace


【解决方案1】:

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

我根据作者的提示直接从文件夹启动应用程序来追踪问题。这解决了问题,但我也想知道为什么会发生这种情况,并思考直接执行和调试之间的区别。

所以我发现IntelliTrace 导致了冻结,因为我激活了一次它以调试 ADO.NET 应用程序,所以它仍然处于启用状态。禁用后,UI Freeze 消失了。要禁用它,请转到调试 -> IntelliTrace -> 打开 IntelliTrace 设置 -> 取消选中“启用 IntelliTrace”。

【讨论】:

  • 我们正在调查这个问题,看看它是否可以在 Visual Studio 的未来版本中得到解决。同时,您可能希望只禁用“手势”事件,而不是完全禁用 IntelliTrace。为此,请转到“工具->选项->IntelliTrace->IntelliTrace 事件”并禁用“手势”集合。
  • 感谢您的回复科林。我按照您的说明进行操作,现在它似乎可以在启用 IntelliTrace 的情况下工作。也许您也应该将此作为答案发布,因为它实际上比我的解决方案更好。
【解决方案2】:

感谢您报告此性能问题。我们已经对其进行了调查并对其进行了追踪。我们正在考虑在未来的版本中解决这个问题。以下是解决此问题的步骤。应用解决方法后,无需禁用“手势”事件或 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

如果您使用的是虚拟机,您可能需要先保存快照,然后再应用解决方法。如果您遇到任何其他问题,请告诉我们。谢谢。

阿齐姆汗

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2018-11-19
    相关资源
    最近更新 更多