1

1 つまたは複数のテキスト コンソール ウィンドウを持つアプリケーションがあり、そのすべてが基本的にシリアル ポート (テキストの入力と出力、文字単位) を表します。これらのウィンドウは、現在のコードの方法で主要なパフォーマンスの問題になりました...私たちは、それらに非常に多くの時間を費やしています。

現在のコードは、ウィンドウに独自の短い寿命を持たせ、メイン アプリケーション スレッドがそれを "SendMessage()" 呼び出しで駆動するように構成されています。このメッセージ パッシングは、信じられないほどのオーバーヘッドの原因のようです。基本的に、OSを迂回するのは間違っていると感じています。

簡単な最適化が既に行われているように、必要に応じてテキスト行全体を描画することに注意してください。

私は Windows コーディングの専門家ではないので、このようなメッセージを送信する以外に、ウィンドウ内のテキストの表示を駆動するアーキテクチャが他にあるかどうかコミュニティに尋ねる必要がありますか? かなり重量級のようです。

主なアプリケーションは移植可能な C/C++/その他の言語プログラムであり、Linux および Solaris でも実行されるため、これは C++ またはプレーン C であることに注意してください。

さらに調査を行ったところ、オーバーヘッドの半分は SendMessage を使用した各メッセージの準備と送信であり、残りの半分は実際の画面描画であると思われます。SendMessage は、同じファイル内の関数間で行われます...

したがって、以下のアドバイスはすべて正しいと思います。

  • 再描画されたものを探します
  • 物を直接描く
  • シリアル コンソールの 10 ~ 20 Hz の更新レートを目指して、すべての文字を画面に送信しないように、時間内に描画操作をチャンクします。

すべての回答を受け入れることができますか?

4

4 に答える 4

1

出力ウィンドウは同じアプリケーションの一部ですか? 彼らはほとんどそうではないように聞こえます...

そうである場合は、 SendMessage() から逃れるために、 Observer のデザイン パターンを調べる必要があります。同じタイプのユースケースに使用しましたが、うまく機能しました。

そのような変更を行うことができない場合は、出力を 100 ミリ秒程度バッファリングして、1 秒あたりの送信メッセージがそれほど多くならないようにすることもできますが、快適な速度で更新する必要もあります。

于 2008-12-19T09:46:41.950 に答える
1

適切にプロファイリングを試みる必要がありますが、その代わりに、SendMessage について心配するのをやめます。これはほとんど問題ではなく、ウィンドウ自体の再描画について考えます。

これらは「テキスト コンソール ウィンドウ」であると説明していますが、複数あると言っていますが、実際には Windows コンソールですか? それとも、アプリケーションが描画しているものですか?

後者の場合は、ペイント コードを測定し、更新ごとにウィンドウを無効化しすぎていないかどうかを調べます。

于 2008-12-19T09:35:16.733 に答える
0

出力ウィンドウは同じアプリケーションの一部ですか? 彼らはほとんどそうではないように聞こえます...

はい、それらはすべて同じプロセスにあります。

私はこのコードを書きませんでした... しかし、SendMessage は、これをすべて 1 つのアプリケーションに適用するには少し重いようです。

これらは「テキスト コンソール ウィンドウ」であると説明していますが、複数あると言っていますが、実際には Windows コンソールですか? それとも、アプリケーションが描画しているものですか?

私たちのアプリはそれらを描画しています。それらは通常の Windows コンソールではありません。

インタラクティブなシリアル セッションが頻繁に行われるため、ユーザーがコンソールに入力したときにもデータを取得する必要があることに注意してください。これは、シリアル ターミナル プログラムで見られるものと非常に似ていると考えてください。

そのような変更を行うことができない場合は、おそらく出力を 100 ミリ秒程度バッファリングして、1 秒あたりの送信メッセージがそれほど多くならないようにすることができますが、快適な速度で更新する必要もあります。

いい視点ね。現在、すべての文字出力によってメッセージが送信されます。

そして、改行が来てウィンドウを上にスクロールすると、行ごとに再描画されます。

任意のサイズのスクロールバック バッファもありますが、スクロール バックはインタラクティブなケースであり、パフォーマンス要件ははるかに低いことに注意してください。

于 2008-12-19T11:04:53.573 に答える