Я пытаюсь загрузить байты большого файла (около 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
}
}
Есть ли способ дальнейшей оптимизации этого блока кода, чтобы в куче создавалось меньше копий.
byte[]
? - person Damien_The_Unbeliever   schedule 16.05.2014uploadData.Clear(); uploadData = null; fileFullData = null; fileEntityBytes = null;
- person John Saunders   schedule 16.05.2014bytesOfTheLargeFile
. - person phoog   schedule 16.05.2014