2

私のプログラムは、多数(一度に250,000)のuint16_tをファイルに書き込んでいます。何らかの理由で、ios :: outフラグを設定すると(VS2010が自動的に設定するため、不要です)、パフォーマンスが約10分の1に低下します。(前/後を参照)。このような大きなパフォーマンスの違いを引き起こす可能性のあるフラグを設定することについて何か考えはありますか?

前:

fileoutput.flags(ios::out); 

前

後:

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

後

4

2 に答える 2

5

flagsストリームのフォーマットフラグを設定するために使用する必要があります。たとえば、出力が左揃えか右揃えか、ブール値を数値または文字列として出力する必要があるため、ストリームのオープンモードを設定するために使用することはできず、実際fileoutput.flags(std::ios::out)の呼び出しは呼び出しです。無効な引数を使用します。エラーの考えられる理由は、実装値がstd::ios::outに等しいことstd::ios::unitbufです。これにより、挿入ごとにバッファがフラッシュされ、パフォーマンスが大幅に低下します。

于 2012-11-30T23:53:40.147 に答える
3

フラグ関数は1つのフラグを設定しません。すべてのフラグを一度に変更します。1つのフラグを変更するには、setf/unsetfを使用する必要があります。

于 2012-11-30T23:10:17.813 に答える