Когда строка <?xml version
записывается в файл через fwrite, последующие операции записи становятся медленнее.
Этот код:
#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;
}
Дает мне этот результат:
Operation 1 took : 3.185 seconds.
Operation 2 took : 2.025 seconds.
Operation 3 took : 2.992 seconds.
То есть, когда мы заменяем строку "<?xml version"
(операция 1) на "<?xml versioX"
(операция 2), результат выполняется значительно быстрее. Третья операция выполняется так же быстро, как и первая, хотя она записывает еще два символа.
Может ли кто-нибудь воспроизвести это?
Windows 7, 32bit, MSVC 2010
РЕДАКТИРОВАТЬ 1
После запроса R.., отключение Microsoft Security Essentials восстанавливает нормальное поведение.