UDP 클라이언트가있는 & 서버가 자주 메시지를 교환하고 두 엔티티의 메모리 사용량이 초당 약 8K의 속도로 증가하는 문제가 나타납니다 (궁극적으로이 작업 관리자에서 관찰 된 것처럼 그들 사이의 통학 속도에 달려 있음)..NET UDP 소켓 보내기 메모리 사용량 증가
가능한 한 간단하게 설명하기 위해 UDP 서비스를 사용하는 MSDN을 기반으로 샘플을 만들었습니다 http://msdn.microsoft.com/en-us/library/tst0kwb1.aspx.
서버 :
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class UDPListener
{
private const int listenPort = 11000;
private static void StartListener()
{
bool done = false;
UInt32 count = 0;
UdpClient listener = new UdpClient(listenPort);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Loopback, listenPort);
try
{
while (!done)
{
byte[] bytes = listener.Receive(ref groupEP);
if ("last packet" == System.Text.Encoding.UTF8.GetString(bytes))
{
done = true;
Console.WriteLine("Done! - rx packet count: " + Convert.ToString(count));
}
else
{
count++;
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
listener.Close();
}
}
public static int Main()
{
StartListener();
return 0;
}
}
그리고 클라이언트 : 나는 모두가 각각의 전송 후 클라이언트 소켓을 떨어 뜨리고, 직접 소켓 인터페이스를 사용하고 UDPClient 시도했습니다
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace UDPSender
{
class Program
{
static void Main(string[] args)
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
IPAddress broadcast = IPAddress.Parse(IPAddress.Loopback.ToString());
byte[] sendbuf = Encoding.ASCII.GetBytes("test string");
IPEndPoint ep = new IPEndPoint(broadcast, 11000);
for (int i = 0; i < 500; i++)
{
s.SendTo(sendbuf, ep);
System.Threading.Thread.Sleep(50);
}
s.SendTo(Encoding.ASCII.GetBytes("last packet"), ep);
s.Dispose();
}
}
}
, 명백한 GC.Collect 등은 아무 소용이 없습니다.
어떤 아이디어
여기에 무슨 일이 일어나고 있는지 -이이 .NET에 근본적인 문제가 보라 할 수없는, 내 코드/샘플에 문제가있을 수 있어야합니다 ....
@rw : 작업 관리자를 사용하여 메모리 사용량을 확인하지 마십시오. Perfmon (Windows와 함께 제공됨) 또는 Sysinternals의 Process Explorer와 같은 것을 사용하고 'Private bytes'메트릭 값을 모니터링하십시오. – Andy
@Andy : 작업 관리자의 '가상 메모리 크기'열은 '비공개 바이트'와 같습니다. –
@rw : 모든 rx/tx를 실행 한 후에 스레드를 잠자기 상태로 유지하여 모든 미해결 패키지를 보내고 메모리 사용량을 확보 할 수 있습니까? –