7

问题描述

我有一个 WPF 应用程序,它通常在具有管理员权限的本地用户帐户下运行。但是,在某些情况下,该进程是由在SYSTEM帐户下运行的服务或脚本启动的,因此该进程也在该SYSTEM帐户下运行。

问题是,当进程在SYSTEM帐户下运行时,会出现一些明显的滞后(UI 响应速度不是很快)。

我使用 perfmon 进行了一些挖掘,没有发现任何可疑的东西(CPU 没有过载,没有抛出异常异常,没有内存泄漏等)。我还检查了事件日志,没有发现任何有用的信息(没有警告/错误,只有与系统无关的信息)。

我首先认为这是由于在模拟上下文中执行的过程,但即使没有模拟(我曾经PsExec.exe -i -s在 SYSTEM 帐户下启动它),滞后仍然存在。

知道这会从哪里来吗?
不要犹豫,询问您是否需要更多信息,我主要是在寻找一些有助于找到根本原因的想法(明显的解决方法是不在 SYSTEM 帐户下启动进程,但这并不是真正的修复)。

另请注意,该应用程序在 Windows Embedded Standard (XP SP3) 的自定义版本下运行,并且在具有电容式触摸屏的设备上运行。

我的问题

我的问题不是“我该如何解决这个问题?” 但是“为什么应用程序在 SYSTEM 帐户下运行时性能低下。

更新 1

我尝试按照@Sander 的建议更改 Windows 的性能优化设置,但没有任何改变(http://support.microsoft.com/kb/308417)。

更新 2

我还使用此应用程序进行了测试:http
: //www.kynosarges.org/WpfPerformance.html#Application 在每个帐户下运行该应用程序时,在第一次 GDI+ 测试(它基本上画了一堆三角形),这让我认为这不是严格限制 WPF 的。同样,除了执行该过程的帐户之外,我没有更改任何内容。

4

2 回答 2

1

我认为你应该完全绕过这个问题。不要提供系统服务 UI,而是将您的应用程序分为两部分 - 执行实际操作的部分将作为服务运行(在任何有意义的帐户下),另一部分 - UI - 将作为普通用户运行过程。

使用 WCF 在两者之间进行通信相对容易。

它将解决您的性能问题,以及您的解决方案暴露的许多潜在安全问题。

于 2014-01-06T07:26:56.567 回答
0

当用户登录时,系统中所需的大多数服务都已启动并正在运行。例如,您在任务管理器和系统托盘中看到的任何内容。

但是,当您从 System acc 运行它时,它实际上必须启动您的情况所需的一些服务,我猜您可以通过识别这些服务并完全使用不同的线程来解决它,这可能会减少您的轮到大约时间。

但是,性能和 CPU 使用率肯定会受到影响。我希望这是有道理的。谢谢

于 2014-01-06T15:18:09.990 回答