我的程序正在將uint16_t的大量數據(每次250,000個)寫入一個文件。出於某種原因,設置ios :: out標誌(不必要,因爲VS2010自動設置)導致性能下降大約10倍。 (見前/後)。任何想法是什麼關於設置可能導致如此巨大的性能差異的標誌?C++ ios :: out文件流標誌:爲什麼會影響性能?
前:
fileoutput.flags(ios::out);
後:
//fileoutput.flags(ios::out);
我的程序正在將uint16_t的大量數據(每次250,000個)寫入一個文件。出於某種原因,設置ios :: out標誌(不必要,因爲VS2010自動設置)導致性能下降大約10倍。 (見前/後)。任何想法是什麼關於設置可能導致如此巨大的性能差異的標誌?C++ ios :: out文件流標誌:爲什麼會影響性能?
前:
fileoutput.flags(ios::out);
後:
//fileoutput.flags(ios::out);
flags
應該用來設置流的格式標誌,例如輸出是左對齊還是右對齊,或者布爾值應該打印爲數字還是字符串,所以你不能用它來設置流的打開模式和實際上呼叫fileoutput.flags(std::ios::out)
是一個帶有無效參數的呼叫。並且錯誤的可能原因在於您的實施值std::ios::out
等於std::ios::unitbuf
,這會導致每次插入的緩衝區刷新,這肯定會導致巨大的性能損失。
標誌功能,不設置一個標誌。它一次改變所有的標誌。要修改一個標誌,你應該使用setf/unsetf。
+1考慮到'std :: ios_base :: out'的值是否與'std :: ios_base :: unitbuf'的值相同是完全實現定義的,這是一個非常好的猜測鑑於嚴重的性能損失。 – ildjarn