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