Поток памяти и куча больших объектов
Я должен передавать большие файлы между компьютерами через ненадежные соединения с помощью WCF.
Поскольку я хочу иметь возможность возобновить файл и не хочу, чтобы размер моего файла ограничивался WCF, я делю файлы на части по 1 МБ. Эти «чанки» транспортируются как поток. Который пока работает довольно хорошо.
Мои шаги:
открытый файловый потокпрочитать фрагмент из файла в byte [] и создать поток памятипередать чанквернуться к 2. пока весь файл не будет отправленМоя проблема в шаге 2. Я предполагаю, что когда я создаю поток памяти из байтового массива, он заканчивается в LOH и в конечном итоге вызывает исключение вне памяти. Я не мог на самом деле создать эту ошибку, возможно, я ошибаюсь в своем предположении.
Теперь я не хочу отправлять byte [] в сообщении, так как WCF скажет мне, что размер массива слишком велик. Я могу изменить максимально допустимый размер массива и / или размер моего чанка, но я надеюсь, что есть другое решение.
Мой фактический вопрос (ы):
Будет ли мое текущее решение создавать объекты на LOH, и это вызовет у меня проблемы?Есть ли лучший способ решить эту проблему?Кстати: на принимающей стороне я просто читаю меньшие порции из прибывающего потока и записываю их непосредственно в файл, поэтому большие байтовые массивы не используются.
Редактировать:
текущее решение:
for (int i = resumeChunk; i < chunks; i++)
{
byte[] buffer = new byte[chunkSize];
fileStream.Position = i * chunkSize;
int actualLength = fileStream.Read(buffer, 0, (int)chunkSize);
Array.Resize(ref buffer, actualLength);
using (MemoryStream stream = new MemoryStream(buffer))
{
UploadFile(stream);
}
}