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

7 .net wpf performance .net-4.0

我遇到了这个帖子中描述的问题.

dotTrace告诉我"手写笔输入"是有罪的. 在此输入图像描述

我尝试Ron ZChaim Zonnenberg发布的代码,但没有奏效.

Rash建议2个解决方法:

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

  2. 如果一个不可行,那么另一个选择是,UIElementHelper.InvalidateAutomationAncestors只会在应用程序的自动化树稀疏时发生(如果已使用自定义窗口自动化对等方禁用了楼宇自动化树,则会发生)并且可视化树密集.所以另一个解决方案是禁用任何自定义自动化代码,并允许WPF构建完整的自动化树.这应该加速UIElementHelper.InvalidateAutomationAncestors.

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

  • 平板电脑输入服务
  • TabletServicePen

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

小智 0

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

\n\n

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

\n\n

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

\n\n

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

\n\n

应用程序崩溃的计算机上运行的 Wacom 驱动程序是:Wacom Tablet 6.3.1w3\n降级到以前的版本后,一切开始工作:WacomTablet_6.3.3-4

\n\n

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

\n\n

这对我们起了作用。

\n\n

玩得开心!

\n