當字符串<?xml version
通過fwrite寫入文件時,隨後的寫入操作變慢。「<?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 versioX"
(操作2)的結果是顯著快替換字符串"<?xml version"
(操作1)。第三個操作與第一個操作一樣快,儘管它正在寫更多的字符。
任何人都可以重現嗎?
Windows 7中,32位,MSVC 2010
編輯1
後R ..建議,禁止微軟Security Essentials的恢復正常的行爲。
也許你有反病毒軟件,鉤住了所有的文件操作,並在這一點上踢... – 2011-05-07 23:37:37
您是否嘗試過切換寫入順序?如果僅僅是第一次寫入需要更長時間,我不會感到驚訝。 – 2011-05-07 23:40:00
R ..禁用Microsoft Security Essentials恢復正常行爲。你願意詳細說明併發布答案嗎? – anno 2011-05-07 23:44:22