当我使用BeginAcceptTcpClient时,应用程序的内存不断增加

时间:2013-09-18 02:47:43

标签: c# .net asynchronous tcplistener

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

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

我使用Windows任务管理器监视Windows服务的进程,并且在没有发送到Windows服务的请求时我检测到内存持续增加。我尝试了很多方法来解决这个问题,但没有结果。每个人都请帮助我。

2 个答案:

答案 0 :(得分:0)

你有一个while循环通过new AsyncCallback(...)

在堆上分配内存

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

答案 1 :(得分:0)

在阅读本文http://msdn.microsoft.com/en-us/library/5w7b7x5f.aspx

后,我自己解决了这个问题

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