Почему расширение файла влияет на скорость записи? (C #, StreamWriter) - PullRequest
11 голосов
/ 09 июля 2010

В настоящее время я тестирую производительность различных методов записи текстовых данных в файл. Кажется, что когда я открываю / пишу / закрываю большое количество раз, используемое расширение влияет на производительность. (.txt и .log работают в ~ 7 раз быстрее)

Используемый код:

private static void TestWriteSpeed(FileInfo file)
{
    Stopwatch watch = new Stopwatch();
    watch.Start();
    for (int i = 0; i < 5000; i++)
    {
        using (StreamWriter writer = file.AppendText())
        {
            writer.Write("This is a test");
        }
    }
    Console.WriteLine(file.Name + ": " + watch.Elapsed);
}

static void Main(string[] args)
{
    TestWriteSpeed(new FileInfo("abc.txt"));
    TestWriteSpeed(new FileInfo("abc.txt.01564611564"));
    TestWriteSpeed(new FileInfo("abc.01564611564.txt"));
    TestWriteSpeed(new FileInfo("abc.xml"));
    TestWriteSpeed(new FileInfo("abc.xml.01564611564"));
    TestWriteSpeed(new FileInfo("abc.config"));
    TestWriteSpeed(new FileInfo("abc.config.01564611564"));
    TestWriteSpeed(new FileInfo("abc.exe"));
    TestWriteSpeed(new FileInfo("abc.exe.01564611564"));
    TestWriteSpeed(new FileInfo("abc.log"));
    TestWriteSpeed(new FileInfo("abc.log.01564611564"));
    Console.ReadLine();
}

Результаты:

abc.txt                  00:00:08.3826847  <---
abc.txt.01564611564      00:00:59.7401633
abc.01564611564.txt      00:00:08.0069698  <---
abc.xml                  00:00:58.2031820
abc.xml.01564611564      00:00:59.3956204
abc.config               00:00:58.4861308
abc.config.01564611564   00:01:01.2474287
abc.exe:                 00:01:00.0924401
abc.exe.01564611564      00:01:00.7371805
abc.log                  00:00:08.0009934  <---
abc.log.01564611564      00:00:59.8029448

Почему это происходит?

Ответы [ 3 ]

15 голосов
/ 09 июля 2010

Похоже, другое приложение или процесс читает или отслеживает записываемые файлы и игнорирует файлы .txt или .log по соображениям производительности.

Почему? Потому что ваш набор кода при запуске на моем ноутбуке дает одинаковые результаты для всех файлов (22 секунды), без каких-либо изменений.

6 голосов
/ 09 июля 2010

Я проверил это на своей рабочей машине;компьютер с процессором Core 2 с 32-разрядной операционной системой Windows XP с установленным Symantec Endpoint Protection AV.Вот мои результаты:

abc.txt:                00:00:07.1192029  
abc.txt.01564611564:    00:00:06.9956377  
abc.01564611564.txt:    00:00:06.9534773  
abc.xml:                00:00:06.9368894  
abc.xml.01564611564:    00:00:07.9326258  
abc.config:             00:00:07.9074675  
abc.config.01564611564: 00:00:08.0205423  
abc.exe:                00:00:21.2559372  
abc.exe.01564611564:    00:00:07.2417322  
abc.log:                00:00:07.0871043  
abc.log.01564611564:    00:00:07.1848522

В моем случае, только расширение .exe заняло больше времени.

Так что да, по-видимому, антивирус мешает записискорости.

Редактировать: Следует отметить, что этот пользователь является ограниченным пользователем домена AD.

5 голосов
/ 09 июля 2010

Как предположил Орсол, ваш AV может игнорировать файлы txt и log.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...