【问题标题】:Windows service using a lot of CPU (VB.NET)Windows 服务使用大量 CPU (VB.NET)
【发布时间】:2010-07-22 13:14:42
【问题描述】:

嗨,

我们在现场有一个设备,它每天向我们的服务器发送一次 TCP 数据包。我有一个不断侦听这些数据包的 Windows 服务。服务中的代码几乎是 MSDN 示例 (Asynchronous Server Socket Example) 的抄本——唯一的区别是我们的实现不会发回任何内容。它只是接收、处理数据并关闭套接字。该服务只是启动一个线程,该线程立即处理上面链接的代码。

问题是,当我进入运行它的服务器的任务管理器时,该服务似乎一直在使用所有 CPU(它说 99)。 IT 部门通知了我。但我不明白这些 CPU 周期是用来做什么的,线程只是阻塞 allDone.WaitOne() 不是吗?

我还用相同的代码制作了一个控制台应用程序,它工作得很好,即仅在处理数据时使用 CPU。每种情况下的任务每次都成功完成,但是服务的实现,看起来效率很低。我在这里做错了什么?

谢谢。

【问题讨论】:

  • 由于该示例中没有任何内容会使用 CPU,因此您必须发布自己的代码。我还建议您使用调试器附加到服务并按 Ctrl+F5 - 这会中断执行,您会立即看到正在执行的代码。

标签: windows-services


【解决方案1】:

使用分析器找出您的 CPU 用在哪里。这应该是你的第一次尝试——分析器是程序员的主要工具之一。

它几乎可以准确地告诉您代码的哪一部分消耗了 CPU。

顺便说一句,代码看起来很糟糕。就像一个如何使用异步 cockets 的例子,而不是一个好的多连接服务器架构。很抱歉,你可能不得不重写这些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    相关资源
    最近更新 更多