fwrite

2011-05-07 17 views
19
dize <?xml version fwrite üzerinden bir dosyaya yazılır

sonraki yazı işlemleri yavaş olur " fwrite

Bu kod:

#include <cstdio> 
#include <ctime> 
#include <iostream> 

int main() 
{ 
    const long index(15000000); 

    clock_t start_time(clock()); 
    FILE* file_stream1 = fopen("test1.txt","wb"); 
    fwrite("<?xml version",1,13,file_stream1); 
    for(auto i = 1;i < index ;++i) 
     fwrite("only 6",1,6,file_stream1); 
    fclose(file_stream1); 

    std::cout << "\nOperation 1 took : " 
     << static_cast<double>(clock() - start_time)/CLOCKS_PER_SEC 
     << " seconds."; 


    start_time = clock(); 
    FILE* file_stream2 = fopen("test2.txt","wb"); 
    fwrite("<?xml versioX",1,13,file_stream2); 
    for(auto i = 1;i < index ;++i) 
     fwrite("only 6",1,6,file_stream2); 
    fclose(file_stream2); 

    std::cout << "\nOperation 2 took : " 
     << static_cast<double>(clock() - start_time)/CLOCKS_PER_SEC 
     << " seconds."; 


    start_time = clock(); 
    FILE* file_stream3 = fopen("test3.txt","w"); 
    const char test_str3[] = "<?xml versioX"; 
    for(auto i = 1;i < index ;++i) 
     fwrite(test_str3,1,13,file_stream3); 
    fclose(file_stream3); 

    std::cout << "\nOperation 3 took : " 
     << static_cast<double>(clock() - start_time)/CLOCKS_PER_SEC 
     << " seconds.\n"; 

    return 0; 
} 

bana bu sonucu verir:

biz "<?xml versioX" (operasyon 2) Sonuç önemli ölçüde daha hızlı olduğu ile dize "<?xml version" (operasyonu 1) değiştirdiğinizde olduğu
Operation 1 took : 3.185 seconds. 
Operation 2 took : 2.025 seconds. 
Operation 3 took : 2.992 seconds. 

. Üçüncü işlem, ilk iki kadar hızlıdır, ancak iki kat daha fazla karakter yazmaktadır.

kimse bu çoğaltılabilir

? Microsoft Security Essentials devre dışı bırakarak, Windows 7, 32 bit, Ar sonra MSVC 2010

DÜZENLEME 1

.. öneri

normal davranışı geri yükler. Windows'ta

+9

Belki tüm dosya işlemlerini çengel ve bu noktada devreye giriyor hangi anti-virüs yazılımı ... –

+0

sen yazma sırasını değiştirme denediniz mi? İlk yazının daha uzun sürmesi, şaşmazdım. –

+1

R .., Microsoft Security Essentials'ın devre dışı bırakılması normal davranışı geri yükler. Bir cevap yazmayı ve cevaplamayı önemser misiniz? – anno

cevap

25

çoğu (hepsi?) Anti-virüs yazılımı okumak veya tekrar virüs desenleri yazılı ve güvenli veya virüs sınıflandırmak ediliyor okuma ve/veya veri çalıştırmak için yazma işlemleri dosyasına çengel çalışır. Anti-virüs yazılımı, bir XML üstbilgisi gördüğü zaman, XML-kötü amaçlı yazılım virüs kalıplarını yüklediğinden ve bu noktadan, diske yazdığınız XML'in bilinen bir virüsün bir parçası olup olmadığını sürekli kontrol etmeye başladığından şüpheleniyorum.

Elbette bu davranış son derece saçmadır ve AV programlarına AV performansını açtıklarında performansının düştüğünü gören yetkili kullanıcılar ile kötü bir şöhrete sahip olanların bir parçasıdır. Aynı amaç, performansı bozmayan başka şekillerde de başarılabilir. Kullanmaları gereken bazı fikirler şunlardır:

  • Her yazma işleminden sonra, dosyaları yalnızca okuma ve yazma arasındaki geçişlerde bir kez tarayın. Diske bir virüs yazmış olsanız bile, daha sonra bir işlemle okunduğunda bir tehdit olmaz. Bir dosya taranır kez
  • , güvenli olduğunu ve modifiye edilene kadar tekrar taramayın unutmayın. çalıştırılabilir programlardır veya
  • Sadece tarama dosyaları başka bir program tarafından komut/program benzeri veri olarak kullanılıyor olarak algılanır.

Ne yazık ki, AV yazılım geliştiricilerinin, AV'nizi kapatmanın dışında, Windows işletim sisteminde genellikle kötü bir fikir olana kadar, herhangi bir geçici çözüm bilmiyorum.

+0

Vay, güzel yakalama. Bunun için bir antivirüs davranışı hiç düşünmemiştim.Ve sonra bir antivirüs kullanmıyorum, bu yüzden ... – Mehrdad

+0

Çoğu (eğer olmasa da) antivirüs yazılımı sadece dosyaları açık veya kapalı olarak tarar, herhangi bir kişinin okuma veya yazma işleminde gerçekten yapması durumunda şaşırırdım. Henüz bunun için bir tanım olmamalı; bugün bilinmeyebilir, ama yarın kötü olabilir. Sadece yürütülebilir dosyaları taramak için, bir yürütülebilir dosya olup olmadığını belirlemek için dosyayı incelemeniz gerekir. Bu sorunların hiçbiri aşılmazdır, ancak tüm yazılımlarda olduğu gibi bir zorunluluk vardır; Bu durumda performans ve güvenlik arasındadır. – Luke

+0

Bir dosyanın önceden taranan önbelleğe alınmış bayrağı, yalnızca taranan virüs modellerinin sürüm numarasını içermelidir. Ve yazı ile okuma arasındaki * geçiş * yazımın kilit noktasıdır. Tüm okumalardan ya da tüm yazımlardan ziyade, sadece bir yazının ardından ilk okunanları taramak, taramanın tüm güvenlik avantajlarını korurken performansı sabitlemenin anahtarıdır. –

İlgili konular