【问题标题】:Application's memory increase continuously when I use BeginAcceptTcpClient当我使用 BeginAcceptTcpClient 时,应用程序的内存不断增加
【发布时间】:2013-09-22 16:06:49
【问题描述】:

我正在编写一个处理来自客户端的请求的 Windows 服务。为了监听请求,我在 While 循环中使用 BeginAcceptTcpClient。

while (stopListenning == false)
{
    tcpListener.BeginAcceptTcpClient(new AsyncCallback(RequestHandler), tcpListener);
}

我使用 Windows 任务管理器监控 Windows 服务的进程,并且在没有向 Windows 服务发送请求的情况下检测到内存不断增加。我尝试了很多方法来解决这个问题,但没有结果。请大家帮帮我。

【问题讨论】:

    标签: c# .net asynchronous tcplistener


    【解决方案1】:

    你有一个while循环通过new AsyncCallback(...)在堆上分配内存

    这将在每次循环执行时增加内存。如果 tcpListener 保留对每个 AsyncCallback 实例的引用,那么这些将不会被垃圾收集,并且您的内存使用量只会不断增长。如果没有维护引用,那么最终 GC 将启动,您的内存使用量将减少。

    【讨论】:

    • 谢谢欧文。对我的案子有什么建议吗?我希望 Windows 服务每次都监听请求。如果收到一个新请求,那么有一个异步方法来处理它,主线程会继续监听另一个。
    【解决方案2】:

    看完这篇文章我自己解决了http://msdn.microsoft.com/en-us/library/5w7b7x5f.aspx

    问题是我没有使用 ManualResetEvent,因为我对它有误解。现在一切正常。

    【讨论】:

      猜你喜欢
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 2017-09-25
      • 2023-03-07
      相关资源
      最近更新 更多