0
我有一个小型的Linux控制器上的UDP服务器,有大约123 MB的RAM,它正在与一个UDP客户端通信。在这个linux控制器上,一个c#应用程序在单声道3.2.8上运行。 一切运行良好,除了udp连接快速消耗内存,并且GC很少收集内存(内存始终在控制台输出1和2之间正好增长65,552字节)。UDP通信快速填充内存
我的客户端代码如下:
UdpClient udpClient = new UdpClient (port,AddressFamily.InterNetwork);
byte[] frame;
IPEndPoint masterEndPoint = null;
try
{
while(true)
{
masterEndPoint = null;
frame = null;
Console.WriteLine("Memory 1: " + GC.GetTotalMemory(false));
frame = _udpClient.Receive(ref masterEndPoint);
Console.WriteLine("Memory 2: " + GC.GetTotalMemory(false));
...
}
...
}
是否有possibilty内存的心不是增长那么快,喜欢使用缓冲区,而不是?如果没有,可以更迅速地收集未引用的对象“masterEndPoint”和“frame”?
如果您需要更多详细信息,告诉我!
任何帮助表示赞赏!
你是说有内存泄漏,或者你有内存使用率尖峰? –
您正在使用同步(阻止)方法来接收消息。改为使用同步事件。请参阅以下网页。这些示例使用套接字,但您可以使用任何继承套接字的类(如udpclient)来替换套接字。 https://msdn.microsoft.com/en-us/library/w89fhyex(v=vs.110).aspx – jdweng
保罗,thx为您的答案。是的,我长期遇到内存泄漏。无论如何,内存的使用量也很大,但它会在一段时间后收集大量的内存(如10 MB左右)。 – user3447279