繁体   English   中英

由于 UI 自动化导致的 WPF 性能问题

[英]WPF performance issue due to UI Automation

我遇到了这个线程中描述的问题。

dotTrace 告诉我“Stylus Input”是有罪的。在此处输入图片说明

我尝试Ron ZChaim Zonnenberg发布的代码,但没有用。

Rash建议了 2 个解决方法:

  1. 只有在机器中运行任何自动化客户端(如屏幕阅读器、平板电脑中的 tabtip 等)时才会触发自动化代码。 因此,摆脱这种情况的一种方法是关闭任何这些自动化客户端应用程序。

  2. 如果一个不可行,那么另一种选择是,UIElementHelper.InvalidateAutomationAncestors 只有在应用程序的自动化树稀疏(如果使用自定义窗口自动化对等项禁用构建自动化树时发生)并且可视化树密集时才会花费更长的时间。 所以另一个解决方案是禁用任何自定义自动化代码并允许 WPF 构建完整的自动化树。 这也应该加快 UIElementHelper.InvalidateAutomationAncestors 的速度。

但是如何关闭tabtip呢? 我试图停止并禁用以下服务,但没有奏效,tabtip.exe 仍在后台运行:

  • 平板电脑输入服务
  • 平板电脑服务笔

Rash 说这个问题应该在 .NET 4.0 SP1 中解决。 有人知道.NET 4.0 SP1 的发布日期吗?

我使用的是 Visual Studio 2010、Windows 7 64 位、Wacom Graphire 4。

谢谢


更新

要关闭 tabtip.exe,我只需要在禁用上述服务后重新启动 Windows。 但这并不能解决我的问题。 为了解决性能问题,我还必须禁用“Wacom Consumer Touch Service”。

根据此线程(2011 年 3 月 22 日):

there is no published timeline for .NET Framework 4.0 sp1

我最近不得不在我们的项目中使用 WPF 工具来处理这个确切的问题。

发生崩溃的机器正在运行 .NET Framework 4.5。

当该工具崩溃时,我们可以看到 .NET PresentationFramework UIAutomation 中发生的崩溃。 崩溃异常是:PresentationFramework.dll 中发生了类型为“System.ArgumentOutOfRangeException”的第一次机会异常 --> 此时该错误似乎出现在 .NET Framework 中

但随后我们可以看到我们在 UIAutomation 调用中崩溃的堆栈,这将我们引导到这个线程并认为这个模块是由 Wacom 服务触发的。

在应用程序崩溃的机器上运行的 Wacom 驱动程序是:Wacom Tablet 6.3.1w3 降级到以前的版本后一切正常:WacomTablet_6.3.3-4

现在我们知道了问题的根源,我们开始寻找一种解决方法,以便仍然能够使用最新的驱动程序。 所以在这里,它似乎不会影响 wacom 数位板功能: - 转到控制面板。 - 双击程序和功能 - 单击左侧标题为打开或关闭 Windows 功能的链接 - 加载时,取消选中“平板电脑可选组件”(在 Windows 7 中可能称为“平板电脑组件”)。 - 单击确定按钮。 这可能需要您重新启动 Windows 计算机。

这对我们有用。

玩得开心!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM