Уменьшите несколько копий одного и того же объекта в куче больших объектов
Я пытаюсь загрузить байты большого файла (около 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