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

时间:2011-04-19 12:06:48

标签: .net wpf performance .net-4.0

我遇到了this thread中描述的问题。

dotTrace告诉我“手写笔输入”是有罪的。 enter image description here

我尝试了the codeRon Z发布的Chaim Zonnenberg,但没有效果。

Rash提出了2种解决方法:

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

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

  3. 但如何关闭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”。

    根据this thread(2011年3月22日):

    there is no published timeline for .NET Framework 4.0 sp1

1 个答案:

答案 0 :(得分:0)

我最近不得不在我们的项目中使用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功能的链接 - 加载时,取消选中“Tablet PC可选组件”(在Windows 7中可称为“Tablet PC组件”)。 - 单击“确定”按钮。 这可能需要您重新启动Windows计算机。

这对我们起了作用。

玩得开心!