c#StreamWriter使用50%的cpu

时间:2012-08-14 17:38:15

标签: c# cpu streamwriter

我已经尝试了所有我能想到的东西,我准备好把头发拉出来。我有一个应用程序使用TCPClient,NetworkStream,StreamWriter和StreamReader与调制解调器通信。调制解调器每小时只接受一个连接,所以我必须打开我的连接。我刚刚切换到一个新的调制解调器,显然在几个小时后停止通信,但保持网络连接打开。我已将NetworkStream.ReadTimeout和NetworkStream.WriteTimeout属性设置为1000毫秒,但是当调制解调器停止通信时,不是StreamWriter超时,而是开始使用我计算机的50%的CPU。没有无限循环,它停在我的代码中的单个StreamWriter.WriteLine()上。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

在某个地方,甚至在你只使用但没有写的代码中,有一个看起来像这样的循环:

while (condition)
{
    condition = checkCondition(); //possibly looking for new data from the socket
}

你有一台双核计算机,这个循环占用了来自一个核心的所有cpu时间。解决此问题的最简单方法是向循环添加一个睡眠调用:

while (condition)
{
    Thread.Sleep(100);
    condition = checkCondition();
}

但同样,此代码可能隐藏在您正在使用的函数调用中,您无法在其中进行更改。如果是这种情况,您可能需要查看您正在使用的类,并找到一种等待不依赖于违规函数的数据的替代方法。

您可以通过在bugger中运行应用程序找出导致问题的功能,等待它达到问题状态,然后暂停执行。稍微介绍一下程序,问题就变得非常明显了。