当我使用 BeginAcceptTcpClient 时,应用程序的内存不断增加
本文关键字:应用程序 内存 不断增加 BeginAcceptTcpClient | 更新日期: 2023-09-27 18:31:47
我正在编写一个处理来自客户端的请求的Windows服务。为了监听请求,我在一段时间循环中使用了BeginAcceptTcpClient。
while (stopListenning == false)
{
tcpListener.BeginAcceptTcpClient(new AsyncCallback(RequestHandler), tcpListener);
}
我使用Windows任务管理器来监视Windows服务的进程,并且我检测到内存不断增加,而没有发送到Windows服务的请求。我尝试了很多方法来解决这个问题,但没有结果。大家请帮帮我。
你有一个 while 循环,它通过 new AsyncCallback(...)
在堆上分配内存
这将在每次循环执行时增加内存。如果 tcpListener 保留对每个 AsyncCallback 实例的引用,则这些实例不会被垃圾回收,您的内存使用量只会增长和增长。如果没有维护引用,那么最终 GC 将启动,您的内存使用将减少。
阅读本文后,我自己解决了问题 http://msdn.microsoft.com/en-us/library/5w7b7x5f.aspx
问题是我没有使用ManualResetEvent,因为我对它有误解。现在一切都好了。