Cuando la cadena <?xml version
se escribe en un archivo mediante fwrite, las siguientes operaciones de escritura se vuelven más lentas.fwrite ahoga en "<? Xml version"
este código:
#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;
}
me da este resultado:
Operation 1 took : 3.185 seconds.
Operation 2 took : 2.025 seconds.
Operation 3 took : 2.992 seconds.
Eso es cuando se reemplaza la cadena "<?xml version"
(operación 1) con "<?xml versioX"
(operación 2) el resultado es significativamente más rápido. La tercera operación es tan rápida como la primera aunque está escribiendo dos veces más caracteres.
¿Alguien puede reproducir esto?
Windows 7, 32 bits, MSVC 2010
EDIT 1
Después R .. sugerencia, la desactivación de Microsoft Security Essentials restaura el comportamiento normal.
Quizás tenga un software antivirus que haya conectado todas las operaciones de archivos y que se active en este punto ... –
¿Ha intentado cambiar el orden de las escrituras? No me sorprendería si fuera solo que la primera escritura lleva más tiempo. –
R .., deshabilitar Microsoft Security Essentials restaura el comportamiento normal. ¿Te gustaría elaborar y publicar una respuesta? – anno