Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

WebRequest stream.Write утечка памяти C#

2.5K
14 ноября 2009 года
Akula
38 / / 17.01.2005
Здравствуйте,

Есть код для загрузки файлов на сервер через 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();

то память не увеличивается. Такое ощущение, что он не отправляет эти данные сразу, а собирает их в себе, а только лишь потом отправляет. Есть ли у кого-то идеи как от этого избавиться?
56K
18 декабря 2009 года
_toras
1 / / 18.12.2009
У меня была подобная проблема.
Решил ее закончив экспорт так:

Page.Response.End();

Не помню зачем, но еще и так:

Page.Response.Close();
Page.Dispose();
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог