1

我们正在运行一个 Windows 服务,它每 5 秒检查一个文件夹中的文件,如果找到,则使用 NLog 记录有关它的一些信息。

我已经尝试过来自ASP.NET 的建议:High CPU usage under no load without succes。

当服务刚刚启动时,几乎没有任何 CPU 使用率。几个小时后,我们看到 CPU 峰值达到 100%,再等待一段时间后,cpu 图如下所示:

窗口任务管理器

我尝试了http://blogs.technet.com/b/sooraj-sec/archive/2011/09/14/collecting-data-using-xperf-for-high-cpu-utilization-of-a-中描述的步骤process.aspx以生成有关正在发生的事情的信息:

xperf 概述

我不知道从哪里继续。任何帮助表示赞赏

4

2 回答 2

1

谁编写了这个 Windows 服务?是你还是第三者?

对我来说,每 5 秒检查一次文件夹的更改听起来真的很可疑,这可能是您出现这种大幅减速的主要原因。

如果操作正确,您可以在目录更改发生时立即获取它们,而在执行此操作时几乎不会花费 CPU 时间。

这篇 Microsoft 文章解释了如何做到这一点:使用函数、和获取目录更改通知FindFirstChangeNotificationFindNextChangeNotificationReadDirectoryChangesWWaitForMultipleObjects

于 2012-12-11T10:15:56.470 回答
1

经过大量挖掘后,它与此有关:

该服务有一个私有对象 X,其属性为 Y

每次触发服务时,X 都会传递给业务逻辑。有 Y 被使用并最终被丢弃。然后垃圾收集器将等到 X 被释放,这在服务重新启动之前永远不会发生。每次触发服务时,这都会导致额外的 GC 等待线程。

于 2013-01-16T14:55:48.517 回答