C 行の読み取りが Python より遅いのはなぜですか?どうすれば最適化できますか?
C と Python での行読み取りのパフォーマンス比較: C の方が遅いのはなぜですか?
C と Python を使用して標準入力からの行読み取りのパフォーマンスを比較する場合、次のことが考えられます。 C コードの実行速度が Python のコードよりもかなり遅くなる傾向があることに驚くでしょう。これは、2 つの言語のデフォルトの入出力 (I/O) 設定の根本的な違いに起因すると考えられます。
C の入出力特性を理解する
デフォルトでは、C 入力ストリームcin は標準 I/O (stdio) システムと同期されます。これは、cin が入力バッファリングを回避し、必要に応じてデータを 1 文字ずつ読み取ることを意味します。このアプローチにより、C I/O ストリームと標準入出力関数を混合する場合の潜在的な問題は防止されますが、特に大量のデータを読み取る場合にパフォーマンスが低下します。
Python のデフォルトの入力バッファリング
対照的に、Pythonデフォルトではバッファリングされた入力を使用します。 Python で標準入力から読み取る場合、インタープリターは入力をより大きなチャンクで読み取り、必要なシステム コールの数を減らします。バッファリングにより、システム コールに関連するオーバーヘッドが最小限に抑えられ、パフォーマンスが向上し、入力処理が大幅に高速化されます。
C ストリーム同期の無効化
C で Python と同様のパフォーマンスを実現するには、同期を明示的に無効にすることができます。 ios_base::sync_with_stdio(false) メソッドを使用して、cin と stdio の間で接続します。これにより、cin が入力を独立してバッファリングできるようになり、パフォーマンスが向上します。
追加の最適化: fgets の使用
getline(cin, input_line) を使用する代わりに、fgets(input_line, sizeof(input_line) の使用を検討してください。 、標準入力) を直接使用します。 fgets は、ストリームから入力行を読み取り、それを文字配列に格納する C 関数です。 cin ストリームを回避することで、オーバーヘッドをさらに削減し、パフォーマンスを向上できる可能性があります。
比較結果
提供された表は、C と Python のさまざまなアプローチの行読み取り速度をまとめたものです。
Implementation | Lines per Second |
---|---|
Python (default) | 3,571,428 |
cin (default/naive) | 819,672 |
cin (no sync) | 12,500,000 |
fgets | 14,285,714 |
wc (not fair comparison) | 54,644,808 |
結果から明らかなように、デフォルトの C 実装のパフォーマンスは Python よりも大幅に遅くなります。ただし、ストリーム同期を無効にするか、 fgets を直接使用することで、C で同等以上のパフォーマンスを達成できます。
以上がC 行の読み取りが Python より遅いのはなぜですか?どうすれば最適化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









