Я ищу способ хранения файлов в zip-файле без потока памяти. Моя цель - сохранить максимум системной памяти, в то время как прямой диск IO не представляет проблемы. Я перебираю результирующий набор базы данных, где я собрал некоторые капли. Это байтовые массивы.Создание файлов и ZIP без потока памяти
Что я делаю это следующее (System.IO.Compression):
using (var archive = ZipFile.Open("data.zip", ZipArchiveMode.Update))
{
foreach (var result in results)
{
string fileName = $"{result.Id}.bin";
using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
// write the blob data from result.Value
fileStream.Write(result.Value, 0, result.Value.Length);
fileStream.Close();
}
archive.CreateEntryFromFile(fileName, fileName);
}
}
Есть 2 проблемы с этой реализации.
- У меня есть * .bin файлы и тот, * .zip (только нужен почтовый)
- Я не знаю, почему, но это использует много оперативной памяти (~ 100MB для 15x1.5MB бункером файлы)
Есть ли способ полностью обмануть память?
UPDATE:
То, что я пытаюсь добиться, чтобы сгенерировать один ZIP-файл, содержащий единичные двоичные файлы, сгенерированные из сгустков базы данных. Это должно произойти внутри контроллера веб-API ASP.NET. Пользователь может запросить данные, но вместо того, чтобы отправлять все данные в ответе HTTP, я генерирую ZIP-файл во время запроса, сохраняю его на локальном файловом сервере и отправляю ссылку загрузки пользователю.
Неясно, что вы пытаетесь достичь - если вы не хотите, чтобы создать файл с '... bin', почему вы создаете новый «FileStream», который явно создает этот файл? –
помогает проверить, что делает CLR, проверяя ваши звонки с помощью ILSPY. Но для меня не совсем понятно, чего вы пытаетесь достичь. –
@JonSkeet Мне нужен zip-файл с отдельными файлами bin. Возможно (и я надеюсь) есть более элегантное решение, например. создание отдельных объектов ZipEntriey для каждого результата базы данных. Я должен делать это без потребления памяти. Поэтому создание файлов в файловой системе кажется хорошим началом. В противном случае я должен держать их в памяти. Или я ошибаюсь? – marrrschine