2012-11-30 48 views
2

我的程序正在將uint16_t的大量數據(每次250,000個)寫入一個文件。出於某種原因,設置ios :: out標誌(不必要,因爲VS2010自動設置)導致性能下降大約10倍。 (見前/後)。任何想法是什麼關於設置可能導致如此巨大的性能差異的標誌?C++ ios :: out文件流標誌:爲什麼會影響性能?

前:

fileoutput.flags(ios::out); 

Before

後:

//fileoutput.flags(ios::out); 

After

回答

5

flags應該用來設置流的格式標誌,例如輸出是左對齊還是右對齊,或者布爾值應該打印爲數字還是字符串,所以你不能用它來設置流的打開模式和實際上呼叫fileoutput.flags(std::ios::out)是一個帶有無效參數的呼叫。並且錯誤的可能原因在於您的實施值std::ios::out等於std::ios::unitbuf,這會導致每次插入的緩衝區刷新,這肯定會導致巨大的性能損失。

+1

+1考慮到'std :: ios_base :: out'的值是否與'std :: ios_base :: unitbuf'的值相同是完全實現定義的,這是一個非常好的猜測鑑於嚴重的性能損失。 – ildjarn

3

標誌功能,不設置一個標誌。它一次改變所有的標誌。要修改一個標誌,你應該使用setf/unsetf。

相關問題