问题描述
我有一个WPF应用程序,通常在具有pipe理员权限的本地用户帐户下运行。 但是,在某些情况下,该进程是由在SYstem帐户下运行的服务或脚本启动的,因此该进程也在SYstem帐户下运行。
问题是当进程在SYstem帐户下运行时,有一些明显的滞后(UI不是很响应)。
我使用perfmon进行了一些挖掘,没有发现任何可疑的东西(cpu没有超载,没有抛出exception的exception,没有内存泄漏等)。 我也检查了事件日志,并没有发现任何有用的(没有警告/错误,只有与系统无关的信息)。
我首先以为这是由于模拟的上下文中执行的过程,但即使没有模拟(我使用PsExec.exe -i -s在SYstem帐户下启动它),滞后仍然存在。
Windows服务不执行OnStart()
如何获得一个Windows服务的命令行参数?
使用XSLT将XML转换为HTML的工具
有关c#.net应用程序与MysqL通信的问题
提前C#string比较
任何想法,这将是从哪里来的?
不要犹豫,问你是否需要更多的信息,我主要是寻找一些有助于find根本原因的想法(显而易见的解决方法是不启动SYstem帐户下的过程,但它不是一个修复)。
此外,请注意,应用程序在Windows Embedded Standard(XP SP3)的自定义版本下运行,并且在具有电容式触摸屏的设备上运行。
我的问题
我的问题不是“我怎么解决这个问题?” 但是“为什么在SYstem帐户下应用程序运行性能低下?
更新1
我试图改变Windows的性能优化设置为@Sanderbuild议,没有任何改变( http://support.microsoft.com/kb/308417 )。
更新2
我也做了一个testing使用这个应用程序: http : //www.kynosarges.org/WpfPerformance.html#Application
当在每个帐户下运行应用程序时,第一次GDI +testing(基本上绘制了一堆三angular形),我在SYstem帐户下的运行时间总是大约两倍,这导致我认为这不是严格的WPF限制。 再次,除了执行进程的帐户之外,我没有任何改变。
定制的用户界面 – Windows还是Linux?
UWP的TitleBar后退button
如何强制Dns.GetHostAddresses .NET方法只查询DNS或DNScaching?
如何使用C#中的TaskScheduler设置“仅在login时运行”和“运行为”?
我怎样才能让一个程序在Windows中不可能被杀死?
我想你应该完全绕过这个问题。 不要给系统服务用户界面,而应将应用程序分为两部分 – 一部分执行实际操作的部分将作为服务运行(无论帐户是否合理),另一部分 – 用户界面将以普通用户身份运行处理。
使用WCF相对容易地进行通信。
它将解决您的性能问题,以及您的解决方案暴露的许多潜在安全问题。
当用户登录时,系统中所需的大部分服务都已启动并正在运行。 例如,无论你在taskmanager和系统托盘中看到什么。
但是,当你从System acc运行它时,它必须实际启动一些你需要的服务。我猜测你可以通过识别这些服务来解决这个问题,并使用不同的线程来完成,周围的时间。
但是,性能和cpu使用率肯定会受到影响。 我希望这是有道理的。 谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。