WebRequest stream.Write утечка памяти C#
Есть код для загрузки файлов на сервер через Web-форму.
Вырезка кода где отправляется сам файл:
WebRequest req = null;
Stream newStream = null;
int BuffSize=1024;
req = WebRequest.Create("http://xxx.com/yyy.php");
req.Method = "POST";
req.Timeout = 120000;
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); // формируем разделитель
// тип передаваемого контента
req.ContentType = "multipart/form-data; boundary=" + boundary;
// ...
// тут отправляется заголовок запроса, имя файла и прочая служебная инфа
// ...
// открываем файл для чтения
FileStream fs = new FileStream(FileAddress, FileMode.Open, FileAccess.Read);
long currfpos = 0;
SendBytes = new byte[BuffSize];
while (currfpos < fs.Length)
{
if (thread_run == true) // проверяем если поток должен работать (т.к. всё это должно работать в отдельном потоке
{
long tmpln = fs.Length - currfpos;
if (tmpln < BuffSize)
{
SendBytes = new byte[tmpln];
}
else
{
//SendBytes = new byte[BuffSize];
tmpln = BuffSize;
}
// Устанавливаем прогрес-бар
Single sfpos = Convert.ToSingle(currfpos);
Single fsize = Convert.ToSingle(fs.Length);
Single proc = (sfpos / fsize) * pbMaxValue;
PBChange(Convert.ToInt32(proc));
// читаем содержимое файла
fs.Read(SendBytes, 0, (int)tmpln);
currfpos += tmpln;
// отправляем на сервер
newStream.Write(SendBytes, 0, SendBytes.Length);
newStream.Flush();
}
else
{
break;
}
}
Код работает, но есть одно НО!! При отправке файла, память занимаемая приложением начинает резко расти. Если закомментить строчки записи в поток:
newStream.Write(SendBytes, 0, SendBytes.Length);
newStream.Flush();
то память не увеличивается. Такое ощущение, что он не отправляет эти данные сразу, а собирает их в себе, а только лишь потом отправляет. Есть ли у кого-то идеи как от этого избавиться?
Решил ее закончив экспорт так:
Page.Response.End();
Не помню зачем, но еще и так:
Page.Response.Close();
Page.Dispose();