C# FileStream и Windows кеш памяти - PullRequest
1 голос
/ 26 мая 2020

Я работаю над приложением, которое должно хранить PDF-файлы для последующей печати. У меня есть реализация, которая проверяет размер PDF-файла и в соответствии с размером, который я выбираю между потоками памяти или файлов (<2GB = MemStream и> 2GB = FileStream).

Когда я использую FileStream, производительность меняется, и я только что заметил, что это вызвано кешем памяти Windows. В основном все, что я использую для записи / чтения в / из FileStream, попадет в этот кеш, и после сохранения 6 PDF-файлов я получаю очень низкую производительность (30 секунд по сравнению с 60s +)

Я объявляю свой FileStream следующим образом :

FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite, 524288, FileOptions.WriteThrough))

Я только что добавил опцию WriteThrough, но, похоже, она не решает проблему. Есть ли вероятность, что после сохранения файла на диск и закрытия / удаления FileStream я очищу кеш-память?

Заранее спасибо!

__________ редактировать ___________

добавление фрагментов кода.

            loadStream = new FileStream(@"C:\temp\FileStream_test.txt", FileMode.Create, FileAccess.ReadWrite, FileShare.None, 524288);
            request.InputStream.CopyTo(loadStream);
            loadStream.Flush();
            loadStream.Position = 0;

и 2-го

        using (var mimePDL = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite, 524288, FileOptions.WriteThrough))
        {
            mimeParts[contentID].Content.DecodeTo(mimePDL);
            mimePDL.Position = 0;
            mimePDL.Flush(true);
            mimePDL.Close();
            mimePDL.Dispose();
        }

А для первого я избавляюсь от него таким образом

            loadStream.Close();
            loadStream.Dispose();
            File.Delete(((FileStream)loadStream).Name);

1 Ответ

0 голосов
/ 26 мая 2020

На мой взгляд, вам не следует хранить PDF-файлы в памяти, если вы не манипулируете ими.

После манипуляций просто сохраните файл и удалите поток.

Если вам нужно что-то метаданные, просто используйте их в своем приложении вместо всего файла.

...