Уменьшите несколько копий одного и того же объекта в куче больших объектов

Я пытаюсь загрузить байты большого файла (около 30 МБ) с HTTPWebRequest на какой-либо сервер. Проблема заключается в том, что, поскольку размер байтов превышает 85000, он сохраняется в LargeObjectHeap(LOH). Проблема в том, что мой код создает как минимум 5 экземпляров одного и того же объекта в LOH, который затем не удаляется из памяти даже после закрытия потока ответа. Ниже приведен фрагмент кода, который вызывает эту проблему. До этого блока кода в 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
   }
 }

Есть ли способ дальнейшей оптимизации этого блока кода, чтобы в куче создавалось меньшее количество копий.

1 ответ

Microsoft недавно представила LargeObjectHeapCompactionMode для GC в.NET 4.5.1. Воспользуйтесь следующей ссылкой, которая может вам помочь: http://msdn.microsoft.com/en-us/library/system.runtime.gcsettings.largeobjectheapcompactionmode%28v=vs.110%29.aspx

Другие вопросы по тегам