1
我有以下方法,從套接字流複製字節磁盤:何時在堆棧上分配固定大小的數組?
public static void CopyStream(Stream input, Stream output)
{
// Insert null checking here for production
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
我很好奇的是:將buffer
堆棧或在 堆上分配?可以肯定的是,我可以使這種方法不安全,並將fixed
關鍵字添加到 變量聲明中,但我不想這樣做,如果我不必這樣做。
很確定它是從堆中分配的,但爲什麼要關心?如果有參考資料,GC不會影響內存... – seand 2011-05-19 02:30:50
如果您希望將其分配到堆棧中,我無法看到「固定」對您有何幫助。當然,如果你希望它在堆棧上分配,恰當命名的「stackalloc」關鍵字是你想要的,而不是「固定的」。那就是說,爲什麼你要把這個分配到堆棧上? 8K有沒有關於堆棧寄存器的危險運動,你覺得比託管堆高水位安全移動8K更好? – 2011-05-19 06:48:39
此外:你是否擔心分配的表現?你擔心它需要幾納秒才能完成分配,而不擔心數千或數百萬納秒的時間會將你正在寫入的巨大鐵盤旋轉到正確位置?在燃燒毫秒時,優化毫微秒毫無意義。 – 2011-05-19 07:21:03