问题描述
我有一个WPF应用程序,它通常在具有管理员权限的本地用户帐户下运行。但是,在某些情况下,进程是由在SYSTEM
帐户下运行的服务或脚本启动的,因此该进程也在SYSTEM
帐户下运行。
问题是,当进程在SYSTEM
帐户下运行时,会出现一些明显的滞后(UI响应不太快)。
我使用perfmon进行了一些挖掘,没有发现任何可疑的东西(CPU没有过载,没有抛出异常,没有内存泄漏等…)。我还检查了事件日志,没有发现有用的东西(没有警告/错误,只有关于系统的无关信息)。
我最初认为这是由于进程在模拟上下文中执行,但即使没有模拟(我使用PsExec.exe -i -s
在SYSTEM帐户下启动它),滞后仍然存在。
你知道这是从哪里来的吗
如果您需要更多信息,请毫不犹豫地询问,我主要在寻找一些有助于找到根本原因的想法(显而易见的解决方法是不在SYSTEM帐户下启动流程,但这并不是真正的解决方案)。
此外,请注意,该应用程序是在自定义版本的Windows嵌入式标准(XP SP3)下运行的,并且运行在带有电容式触摸屏的设备上。
我的问题
我的问题不是"我如何解决这个问题?"而是"为什么应用程序在SYSTEM帐户下运行时性能较低。
更新1
我试图按照@Sander的建议更改Windows的性能优化设置,但没有任何改变(http://support.microsoft.com/kb/308417)。
更新2
我还用这个应用程序做了一个测试:http://www.kynosarges.org/WpfPerformance.html#Application
当在每个帐户下运行应用程序时,我在SYSTEM帐户下的第一次GDI+测试(它基本上画了一堆三角形)的运行时间持续延长了大约两倍,这让我认为这并不是严格的WPF限制。再说一遍,除了执行流程的帐户之外,我没有更改任何内容。
我认为您应该完全绕过这个问题。不要提供系统服务UI,而是将应用程序分为两部分——一部分执行实际操作,将作为服务运行(在任何有意义的帐户下),另一部分UI将作为普通用户进程运行。
使用WCF可以相对容易地在两者之间进行通信。
它将解决您的性能问题,以及解决方案暴露的许多潜在安全问题。
当用户登录时,系统中所需的大多数服务都已启动并运行。例如,无论您在任务管理器和系统托盘中看到什么。
然而,当你从System acc运行它时,它必须实际启动你的情况下需要的一些服务。我猜你可以通过识别这些服务来解决这个问题,并完全使用不同的线程,这可能会减少你的周转时间。
但是,性能和CPU使用率肯定会受到影响。我希望这是有道理的。感谢