查找影响 .Net 应用程序性能的 Windows 设置

Posted

技术标签:

【中文标题】查找影响 .Net 应用程序性能的 Windows 设置【英文标题】:Find Windows Setting that's Affecting Performance of .Net Application 【发布时间】:2013-11-25 15:41:24 【问题描述】:

ClickOnce 已部署 .Net 4.5 WPF 应用程序。测试在 Windows 7 和 Windows Server 2008 R2 上运行。内存/CPU/IO(写入本地数据库)密集型过程在 2 台测试机器上需要 8 分钟,而在其他每台机器上大约需要一个小时(两台“快速”机器都是较旧的 Windows 7 机器)。虚拟 / 物理,32 / 64 位没有区别;其中一台“快速”机器是 32 位的,另一台是 64 位的(两者具有相同的内存和处理器规格,但其中一台“慢速”机器也是如此)。 32 位机器实际上运行得更快一些。较新的 64 位 Windows 7 机器具有 3 倍的内存和更快的处理器,比“快速”的 32 位机器记录了一些最慢的时间。

流程的每个部分(创建大量对象、将插入语句发送到本地数据库等)在“慢”机器上都需要更长的时间。 IOW,不是 IO 与 CPU。

快速:

32 位,4GB RAM,2X4 核心处理器 64 位,4GB RAM,2X4 核心处理器

慢:

32 位,4GB RAM,2X4 核心 procs (唯一真正的区别是,例如,这台和上面的快速硬盘制造商不同,这台机器的二级缓存是快速机器的两倍)李> 64 位、12GB RAM、2X6 procs(多台机器使用这些规格进行了测试,它们的测试速度接近最慢) 64 位,4GB RAM,1X2 核心 proc(虚拟) 64 位、8GB RAM、2X2 核心处理器(Server 2008 R2 具有更快的 SCSI 驱动器)

我们这里有一台 32 位机器,它与“快速”的 32 位机器几乎完全相同。唯一真正的区别(除了不同的硬盘制造商)是“慢”机器的二级缓存是“快”机器的两倍。那台“慢”的机器需要一个多小时。因此,似乎可以肯定这不是硬件问题。

这似乎也不是其他一些正在运行的进程的问题;我看过的东西:

Machine.config:从“快速”机器复制到“慢速”机器。没有区别。 硬盘加密:有些机器开启了硬盘加密,有些没有。其中一台“快速”机器没有加密,但一些慢速机器有。 实时病毒防护:大多数机器都在运行此功能(包括“最快”的机器和一些最慢的机器)。 进程不依赖于网络;整个过程都是本地的。 页面文件设置:“最快”和“最慢”之一之间的重复设置。 处理器负载平衡:查看处理器负载平衡(仅通过查看任务管理器)。没有明显区别。 构建平台目标:提出了一个只构建 X64 的想法,这将使 64 位机器运行得更快(也许他们在 WOW64 上运行应用程序?)。没有不同。使用ManifestModule.GetPEKind 验证构建的 exe 中的差异。 比较了名为“OnlineAppQuotaUsageEstimate”的 ClickOnce 相关值的注册表设置差异。 “慢”机器上缺少该值,但是当我将它添加到“快速”机器上存在的键下时,没有区别。在任何情况下似乎都没有关系。 服务包/补丁:这里的一切都一样。 运行 NP Profiler。 “慢”和“快”机器之间的区别:“快”机器运行不做那么多工作的线程需要更长的时间,但运行繁重的线程需要更少的时间。没有一个线程/方法是罪魁祸首。我确实注意到的一件事是文件中的日志条目在慢速机器上花费了可测量的时间,但在快速机器上没有可测量的时间。这让我仔细检查了硬盘驱动器和缓存,但除了上面提到的 L2 差异之外没有其他区别(较慢的机器的缓存是较快的机器的两倍)。 [编辑] 创建了一个小型控制台应用程序,它执行一些类似的操作(字符串/列表操作以及写入本地数据库)。完全相同的比例结果。

所有迹象都表明,两台“快”机器上的某些 Windows 配置与“慢”机器不同。寻找有关差异的建议;我认为没有任何工具可以指向两台不同的机器并显示差异。我无法查看注册表导出差异;将有 500K。

【问题讨论】:

服务包和补丁怎么样?那就是我要看的地方。 我同意@Blam。另外,也许不同的服务正在运行?也许在你的程序中添加一些代码来更新整个执行过程中不同点的日志......也许你可以看看是否有一个特定的代码区域运行缓慢,也许这可以告诉你一些事情......只是随机的想法。祝你好运! @Blam:为我尝试过的事情添加了两个项目符号。应该已经提到了。 您是否测试过在 ClickOnce 之外运行应用程序(即独立可执行文件)? @NothingsImpossible:这是一个大规模解决方案(约 35 个项目)。它甚至不能手动发布——它只会在从自动构建安装时运行。不过,你提出了一个很好的建议。我可能会着手一个单独的解决方案,将其构建为常规可执行文件并以这种方式进行测试。 【参考方案1】:

在“慢”机器上启动 NGEN 服务。这是一个 Windows 服务。

【讨论】:

学过NGEN,试过这个方法(***.com/questions/443955/…),没用。使用 NGEN 从命令行手动安装应用程序,看到它做了什么,什么都没有。不过建议很好。顺便说一句,这不是一项您只能启动的服务(它只会关闭)。

以上是关于查找影响 .Net 应用程序性能的 Windows 设置的主要内容,如果未能解决你的问题,请参考以下文章

Windows 7(或更高版本)中活动可见 HWND 的数量是不是会显着影响性能?

.net core 抛异常对性能影响的求证之路

.net 中未使用的用法会影响性能吗? [复制]

如何使用 Chrome 和 DevTools 查找影响页面性能的内存问题,包括内存泄漏内存膨胀和频繁的垃圾回收

.net core 抛异常对性能影响的求证之路

AOT和单文件发布对程序性能的影响