2010-07-09 25 views
11

Tôi hiện đang thử nghiệm hiệu suất của các phương pháp khác nhau để ghi dữ liệu văn bản vào một tệp. Dường như khi tôi mở/ghi/đóng một số lượng lớn thời gian, phần mở rộng được sử dụng sẽ ảnh hưởng đến hiệu suất. (.txt và .log là ~ 7 lần nhanh hơn)Tại sao đuôi tệp ảnh hưởng đến tốc độ ghi? (C#, StreamWriter)

Mã sử ​​dụng:

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(); 
} 

Kết quả:

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 

Tại sao điều này xảy ra?

+14

Antivirus đã bị tắt, tôi hy vọng? –

+2

@orsol người trên trái đất sẽ chạy AV thay vì chỉ RANU? – Will

+0

@Will RANU là gì? –

Trả lời

15

Có vẻ như một ứng dụng hoặc quy trình khác đang đọc hoặc giám sát các tệp đang được ghi và bỏ qua các tệp .txt hoặc .log vì lý do hiệu suất.

Tại sao? Bởi vì bó của bạn mã, khi chạy trên máy tính xách tay của tôi, cho kết quả tương tự cho tất cả các tập tin (22 giây), mà không có bất kỳ biến thể.

+0

Wow tôi sẽ không bao giờ có mặc dù về antivirus của tôi, thx cho câu trả lời nhanh chóng –

5

Như Orsol đề xuất, AV của bạn có thể bỏ qua tệp txt và nhật ký.

6

Tôi đã thử nghiệm điều này trên máy tính của mình; một máy tính Core 2 với Windows XP 32 bit có cài đặt Symantec Endpoint Protection AV. Đây là kết quả của tôi:

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 

Trong trường hợp của tôi, đó chỉ là phần mở rộng .exe mất nhiều thời gian hơn.

Vì vậy, có, khi đoán, phần mềm chống vi-rút đang can thiệp vào tốc độ ghi.

Chỉnh sửa: Tôi cần lưu ý, người dùng này là Người dùng bị giới hạn trên miền AD.

Các vấn đề liên quan