Piy*_*ush 7 c# garbage-collection large-object-heap
我试图通过HTTPWebRequest将大文件(大约30MB)的字节上传到某个服务器.问题是由于字节大小超过85000,因此它存储在LargeObjectHeap(LOH)中.问题是我的代码在LOH中至少创建了同一个对象的5个实例,即使在关闭响应流之后也没有从内存中删除.以下是导致此问题的代码段.在此代码块之前,LOH中只有一个文件实例.
using (IO.Stream requestStream = webReqest.GetRequestStream())
{
List<byte> uploadData = new List<byte>();
uploadData.AddRange(Encoding.UTF8.GetBytes(stringContainingHeaderInfo));
uploadData.AddRange(bytesOfTheLargeFile);
byte[] fileFullData = uploadData.ToArray();
requestStream.Write(fileFullData, 0, fileFullData.Length);
requestStream.Close();
uploadData.Clear();
uploadData = null;
fileFullData = null;
fileEntityBytes = null;
using (WebResponse webResponse = webRequest.GetResponse())
{
//Do Something with the response
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法进一步优化此代码块,以便在堆中创建更少数量的副本.
Microsoft 最近在 .NET 4.5.1 中引入了用于 GC 的 LargeObjectHeapCompactionMode 请使用以下链接可能对您有帮助: http://msdn.microsoft.com/en-us/library/system.runtime.gcsettings.largeobjectheapcompactionmode (v=vs .110).aspx