当<?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"
用(操作 2)替换字符串(操作 1)时"<?xml versioX"
,结果明显更快。第三个操作与第一个操作一样快,尽管它要多写两倍的字符。
任何人都可以重现这个吗?
Windows 7、32 位、MSVC 2010
编辑 1
在 R.. 建议后,禁用 Microsoft Security Essentials 可恢复正常行为。