【发布时间】:2013-06-22 06:17:37
【问题描述】:
我们正在开发一个供内部使用的 WPF 4.0 应用程序。
在某些客户端上,由于 UI 自动化,我们遇到了巨大的性能问题
(这些客户端安装了数位板服务笔、触控等软件。)。
这是 WPF 4.0 的一个已知问题,例如:
我们已经能够在规格非常有限的机器上重现此问题。
在这台机器上打开一个 WPF 窗口需要:
- 00:00:02 - 未安装任何 UI 自动化触发软件
- 00:01:41 - 安装了 UI 自动化触发软件(此测试使用 RoboForm)
- 00:00:09 - 安装了 UI 自动化触发软件,并应用了修补程序 KB2484841
如您所见,安装修补程序 KB2484841 是一个巨大的改进,但仍然不如没有安装 ui 自动化触发软件的运行速度。
此外,我们对在客户端安装哪些软件没有太多控制权,因此很难为所有客户端推出此修复程序。
因此,是否可以“关闭”整个 WPF 应用程序的 UI 自动化? 我知道它可以在每个 UserControl 的基础上完成,但是整个应用程序是否可以?
我试过this帖子中提供的代码,但没有成功。
感谢您的宝贵时间,
科恩
【问题讨论】:
-
UI 自动化用于辅助功能。因此,如果客户安装了由于任何残疾而需要的软件,您想阻止他们使用您的软件吗?接受一些慢下来,至少检测“正在使用自动化,未安装修补程序”并提示用户(一次,或每隔几次重新启动)他们应该安装它不是更好吗?
-
这是一个内部业务应用程序;此类场景不受支持且超出此应用程序的范围。
-
不支持...直到您找到第一位残疾员工。这是 WPF 做得好的一件事——它确保所有边缘情况,如残疾和本地化以及字符串安全,都在你需要它们的时候连接起来。但这种准备是有代价的。
-
问题是 - 微软从未摆脱 UIAutomation 的最后几个错误。它会导致应用程序崩溃,减慢速度,导致无穷无尽的问题,并且故意使其难以禁用。这是一个功能,最好以任何可能的方式完全禁用它,至少在 Microsoft 解决未解决的问题之前。
标签: .net wpf ui-automation microsoft-ui-automation