1
我正在開發一個用C#編寫的在線FPS,它將使用P2P將玩家連接在一起,而不是集中式服務器。我需要一種快速的方式來讀取每個數據流中的數據,然後在收到數據包時通知遊戲。一種快速的方式從Streams讀取()數據而不使用多線程
class StreamReader
{
List<XStream> streams;
onPeerFound(XStream stream) {
System.Threading.Thread mthread = new System.Threading.Thread(targetthread);
mthread.start(stream);
}
void targetthread(object sender) {
XStream mstream = (XStream)sender;
while(isrunning) {
byte[] buffer = new byte[4086];
Array.Resize<byte>(ref buffer,mstream.Read(buffer,0,4086));
onPacketReceived.Invoke(buffer,mstream.remoteID);
}
}
}
有沒有更快的方式來做到這一點,而無需爲每個流創建一個單獨的線程?請注意,每個XStream也有一個DataAvailable屬性,它返回接收緩衝區中的數據量。
memcopy有什麼問題? – IDWMaster 2011-05-23 04:06:13
複製東西並調整它們的大小會浪費內存帶寬(這很大但很有限)並導致堆碎片。運行時將修復堆碎片,但這樣做在性能方面不「免費」。 – Yaur 2011-05-23 04:15:22