Записать много файлов на диск c#

Мне нужно записать на диск много (> 5000000) файлов (размер < 200 байт). Использую File.WriteAllText, но работает долго (более двух часов, дальше не вытерпел) и кушает много оперативки (хотя, как мне казалось, не должно). Структура файловой системы реализована в виде префиксного дерева.

public void AddTempPassport(TempPassport newPassport)
        {
            var splitedSeries = new string[] { string.Join("", newPassport.Series.Take(2)), string.Join("", newPassport.Series.Skip(2)) };
            var splitedNumber = new string[] { string.Join("", newPassport.Number.Take(3)), string.Join("", newPassport.Number.Skip(3)) };
            string path = Path.Combine(_rootPath, _tempPassportsPath, splitedSeries[0], splitedSeries[1], splitedNumber[0], splitedNumber[1]);
            if (!_fileHandler.DirectoryExists(path))
            {
                _fileHandler.CreateDirectory(path);
            }
            _fileHandler.WriteAllText(Path.Combine(path, $"{newPassport.Series},{newPassport.Number}.json"), JsonSerializer.Serialize(newPassport));
        }

Приложение берет строчку из файла с данными и создает новый файл с сериализованным объектом.

public void Update(string filePath)
        {
            using var inStream = _reader.GetStream(filePath);
            string line;
            inStream.ReadLine();
            while ((line = inStream.ReadLine()) != null)
            {
                var lineArr = line.Split(',', StringSplitOptions.RemoveEmptyEntries);
                _dbAccess.AddTempPassport(new TempPassport
                {
                    Series = lineArr[0].Trim(),
                    Number = lineArr[1].Trim(),
                });
            }

            if(!_dbAccess.IsEmpty())
            {
                UpdateEvents();
            }

            _dbAccess.FillMainStorage();
        }

Но всё это занимает слишком много времени и оперативки.Файл с данными содержит 5.000.000 строк (каждая строка - это отдельный объект и отдельный файл). Объект (series: 1200, number: 107177) имеет путь FileDatabase\TempPassports\12\00\107\177\1200,107177.json


Ответы (1 шт):

Автор решения: Yotic

Используйте архивы, так вы сможете освободить диск от нагрузки создания файла и обращения к нему. Создавайте Entry( ака File ) и используйте их через Stream. Ещё кстати, система тратит около 50 байтов на хранение пустого файла.

→ Ссылка