有没有办法避免创建具有固定长度的新字节数组实例,并从较大的字节数组Array.Copy
调用Buffer
到名为reply
的新创建的回复数组?
还是其他任何想法?
// Buffer : byte[]
// host : a WCF host
while (code >= 0)
{
try
{
if (Socket.Available == 0)
{
Thread.Sleep(Wait);
continue;
}
var length = Socket.Receive(Buffer);
if (length > 0)
{
Log("Read", ServerPort, " ->", Client, length);
var reply = new byte[length];
Array.Copy(Buffer, reply, length);
try { code = host.Reply(ServerPort, Client, reply); }
catch (Exception ex)
{
code = -2;
Log("Exception", ServerPort, "<=>", Client, ex);
ConnectToHost();
}
}
}
catch (Exception ex)
{
code = -3;
Delist();
if (ex.GetType() != typeof(ThreadAbortException))
Log("Exception", ServerPort, "!!!", Client, ex);
Log("Disconnect", ServerPort, @"<\>", Client, Relay.Host.Address());
Tcp.Close();
}
答案 0 :(得分:1)
您可以使用ArraySegment<T>作为传递更大字节数组的方法。我认为API有点蹩脚,但它确实可以解决问题。
但是,您似乎也可以使用为WCF提供的BufferManager类来管理代码中的可重用缓冲区。