C を学習したさまざまな C ユーザーは、インターフェイスがアクセスしやすく、C でコーディングしている間でも printf / scanf ファミリの関数を使い続けることを好みます。ローカリゼーション機能。ただし、C の ifstream と比較すると、パフォーマンスの問題が発生する可能性があります。特に、fscanf は一貫して ifstream よりもパフォーマンスが優れていることが観察されています。
IOStreams のパフォーマンスを向上するには、次のテクニックを検討してください。
バッファ サイズを増やすと、HDD ヒットとシステム コールが減少し、パフォーマンスが向上します。 pubsetbuf() を使用して streambuf 実装にアクセスし、バッファを設定します。
char Buffer[N]; std::ifstream file("file.txt"); file.rdbuf()->pubsetbuf(Buffer, N);
ロケールは、文字変換や複雑なシステム コールによりパフォーマンスに影響を与える可能性があります。このオーバーヘッドを回避するには、マシン間の変換と均一性を最小限に抑えるように最適化されたデフォルトの C ロケールを選択してください。
このパラメータは、テストでは顕著なパフォーマンスの向上を示しませんでした。 .
簡単なテスト プログラムを使用したベンチマークにより明らかになります。異なるプラットフォームやコンパイラでは結果が異なります。この結果は、IOStreams のパフォーマンスが実装に依存していることを示唆しています。
さまざまなベンチマークからの結果は次のとおりです:
g 4.7.2-2ubuntu1, -O3, Ubuntu 11.10 x86_64
g 4.4.5、-O3、Ubuntu Linux 10.10 x86_64
g i686-apple-darwin10-g -4.2.1 (GCC) 4.2.1、mac mini、4GB RAM
clang 3.8.0-2ubuntu4、Kubuntu 16.04 Linux 4.8-rc3
これらの結果は、IOStreams パフォーマンスの最適化における実装品質の重要性を強調しています。
以上がC の「ifstream」は常に「fscanf」より遅いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。