Мне нужно перенести большие файлы между компьютерами через ненадежные соединения с помощью WCF.
Потому что я хочу, чтобы иметь возможность возобновить файл, и я не хочу ограничиваться в моем файлеize WCF, я разбиваю файлы на 1 Мб. Эти "куски" транспортируются как поток. Что работает довольно хорошо, пока.
Мои шаги:
- открыть файл
- читать фрагмент из файла в байт [] и создавать memystream
- часть передачи
- назад до 2. до отправки всего файла
Моя проблема находится на шаге 2. Я предполагаю, что когда я создаю поток памяти из массива байтов, он попадает в LOH и в конечном итоге выдает исключение outofmemory. Я не мог создать эту ошибку, возможно, я ошибаюсь в своем предположении.
Теперь я не хочу отправлять байт [] в сообщение, поскольку WCF скажет мне, что размер массива слишком велик. Я могу изменить максимально допустимый размер массива и/или размер моего куска, но я надеюсь, что есть еще одно решение.
Мой фактический вопрос (ы):
- Будет ли мое текущее решение создавать объекты в LOH и это вызовет у меня проблемы?
- Есть ли лучший способ решить эту проблему?
Btw: На стороне приема я просто читаю мелкие куски из поступающего потока и записываю их непосредственно в файл, поэтому не задействованы большие массивы байтов.
Edit:
текущее решение:
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);
}
}