文字列<?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)に置き換えると、結果が大幅に高速になります。3番目の操作は、最初の操作と同じくらい高速ですが、さらに2倍の文字を書き込みます。
誰でもこれを再現できますか?
Windows 7、32ビット、MSVC 2010
編集1
R ..の提案の後、Microsoft Security Essentialsを無効にすると、通常の動作が復元されます。