当字符串<?xml version
通过fwrite写入文件时,后续的写入操作会变慢。
这段代码:
#include #include #include 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(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(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(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 ..建议之后,禁用Microsoft Security Essentials会恢复正常行为。
在Windows上,大多数(所有?)防病毒软件通过挂钩文件读取和/或写入操作来运行正在读取或写入的数据病毒模式并将其归类为安全或病毒。 我怀疑你的防病毒软件,一旦看到XML标头,就会加载XML恶意软件病毒模式,并从此开始不断检查你正在写入磁盘的XML是否是已知病毒的一部分。
当然,这种行为完全是荒谬的,并且是AV程序与有能力的用户之间的良好声誉的一部分,他们看到他们的性能一旦打开AV就会直线下降。 同样的目标可以通过不破坏性能的其他方式实现。 以下是他们应该使用的一些想法:
不幸的是,除了关闭你的AV之外,我不知道任何解决方法,直到AV软件制造商明智…这在Windows上通常是一个坏主意。
以上就是c/c++开发分享fwrite“<?xml version”上的chokes相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562812.html