我定义了一个List集合:
public List<PacketToSend> Packets = new List<PacketToSend>();
PacketToSend类对象是:
public class PacketToSend
{
public byte[] JPEG;
public string LicenseKey;
public Int64 TS;
public Int64 FrameLag;
public Int64 NetworkLag;
public DateTime RelayDiff ;
}
我在我的服务器的web-scokect连接上的OnMessage事件中添加了这个集合:
Packets.Add(new PacketToSend
{
FrameLag = frameLag,
RelayDiff = DateTime.Now,
TS = timeStamp,
JPEG = packet2,
LicenseKey = licenseKey.ToUpper(),
NetworkLag = 0
});
这个问题唯一重要的值是TS字段。
我已经体验到消息的顺序有时不正确所以,我使用此代码来获得“最年轻的”消息。 TS:
var min = Packets.OrderBy(m => m.TS).FirstOrDefault();
现在我已经经历过(特别是当名单超过50时,“最年轻的”TS没有回归。
我打算尝试使用&#39; Min&#39;而是这样:
var min2 = Packets.OrderBy(m => m.TS).Min();
但我当然得到错误:
System.ArgumentException: At least one object must implement IComparable.
任何想法为什么第一种做法并不总是有效,也许是关于如何使用第二种做法的建议?
N.B。
更多信息。
我等到TS得到一个缓冲区5秒后再尝试获得最早的1.我知道人们会建议使用Locks但是我的FPS经历了减速,需要20fps 。此外,我使用了并发集合,但我遇到了错过的帧