У меня есть веб-сервис WCF, который сохраняет файлы в папку (около 200 000 небольших файлов). После этого мне нужно переместить их на другой сервер.
Решение, которое я нашел, это закрепить их, а затем переместить их.
Когда я принял это решение, я провел тест с (20 000 файлов), замачивая 20 000 файлов, заняв всего около 2 минут, и перемещение zip происходит очень быстро. Но в производстве, застежка 200 000 файлов занимает более 2 часов.
Вот мой код для zip-папки:
using (ZipFile zipFile = new ZipFile())
{
zipFile.UseZip64WhenSaving = Zip64Option.Always;
zipFile.CompressionLevel = CompressionLevel.None;
zipFile.AddDirectory(this.SourceDirectory.FullName, string.Empty);
zipFile.Save(DestinationCurrentFileInfo.FullName);
}
Я хочу изменить веб-сервис WCF, чтобы вместо сохранения в папку он сохранялся в zip.
Я использую следующий код для тестирования:
var listAes = Directory.EnumerateFiles(myFolder, "*.*", SearchOption.AllDirectories).Where(s => s.EndsWith(".aes")).Select(f => new FileInfo(f));
foreach (var additionFile in listAes)
{
using (var zip = ZipFile.Read(nameOfExistingZip))
{
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.None;
zip.AddFile(additionFile.FullName);
zip.Save();
}
file.WriteLine("Delay for adding a file : " + sw.Elapsed.TotalMilliseconds);
sw.Restart();
}
Первый файл для добавления в zip занимает всего 5 мс, но добавленный 10 000-й файл занимает 800 мс.
Есть ли способ оптимизировать это? Или если у вас есть другие предложения?
ИЗМЕНИТЬ
Пример, показанный выше, предназначен только для проверки, в веб-сервисе WCF у меня будут разные файлы отправки запроса, которые мне нужно добавить в Zip файл. Поскольку WCF без учета статусов, у меня будет новый экземпляр моего класса с каждым вызовом, поэтому как я могу открыть файл Zip для добавления дополнительных файлов?