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

本文关键字:应用程序 内存 不断增加 BeginAcceptTcpClient | 更新日期: 2023-09-27 18:31:47

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

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

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

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

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

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

阅读本文后,我自己解决了问题 http://msdn.microsoft.com/en-us/library/5w7b7x5f.aspx

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