减少大对象堆中相同对象的多个副本

本文关键字:对象 副本 | 更新日期: 2023-09-27 18:03:44

我试图上传一个大文件的字节(约30MB)与HTTPWebRequest到一些服务器。问题是,由于字节的大小大于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
   }
 }

是否有办法进一步优化这个代码块,以便在堆中创建更少的副本。

减少大对象堆中相同对象的多个副本

微软最近在。net 4.5.1中为GC引入了LargeObjectHeapCompactionMode,请使用以下链接,这可能会对您有所帮助:http://msdn.microsoft.com/en-us/library/system.runtime.gcsettings.largeobjectheapcompactionmode (v = vs.110) . aspx