【发布时间】:2010-08-30 08:01:11
【问题描述】:
我们有一个从远程设备收集遥测数据的生产系统。这些数据以合理的频率发送,我们最终在高峰时间每秒收到多达数千条消息。每条消息的有效负载约为 80 个字节。我开始对各种存储机制进行一些性能测试,但我想首先我会尝试看看在不涉及任何数据存储的情况下我能以多快的速度推送 UDP。我在本地机器上每秒收到大约 70,000 条消息的最大吞吐量测试(如果我使用另一台机器发送测试数据似乎大致相同)。根据我的粗略计算,考虑到网络链路容量,这比我预期的要低得多。发送者处于发送数据的紧密循环中。我完全了解 UDP re 的所有问题;丢包等。我只是想了解一下我们系统的弱点。
吞吐量这么低是因为数据包很小吗?
马特
private IPEndPoint _receiveEndpoint = new IPEndPoint(IPAddress.Any, _receivePort);
private Stopwatch sw = new Stopwatch();
private int _recievedCount = 0;
private long _lastCount = 0;
private Thread _receiverThread;
private bool _running = true;
_clientReceive = new UdpClient();
_clientReceive.Client.Bind(_receiveEndpoint);
_receiverThread = new Thread(DoReceive);
_receiverThread.Start();
while (_running)
{
Byte[] receiveBytes = _clientReceive.Receive(ref _receiveEndpoint);
_clientReceive.Receive(ref _receiveEndpoint);
if (!sw.IsRunning)
sw.Start();
string receiveString = Encoding.ASCII.GetString(receiveBytes);
_recievedCount = ++_recievedCount;
long howLong = sw.ElapsedMilliseconds;
if (howLong/1000 > _lastCount)
{
_lastCount = howLong/1000;
Invoke(new MethodInvoker(() => { Text = _recievedCount + " iterations in " + sw.ElapsedMilliseconds + " msecs"; }));
}
}
【问题讨论】: