質問

私の深刻な頭部-scratcher自分の手です。の研究にも取り組ん性能上の問題、コンポーネントのラインナップ部品に当社の願います。

です。netアプリケーションは非常に大きく、ほとんど全てのwindowsます。の一環として新たな取り組みまrewrote当社の基幹部品が豊富なコンポーネントのラインナップすると確認ダイアログが出ますありがたくさんのサポート<-->コンポーネントのラインナップinteropとなっていることも接着剤も一緒にいることと関係していたんですが、そんなと思います。

私はプロのオペレーションにアリのプロファイラには、多くの活動発生の機能UnsafeNativeMethods.IntGetMessageW.蟻の報告を行うCPUの活動かりとして、当社の全てのビジネスロジックおよびコンポーネントのラインナップの描画も。ありませんのマネージドコードdownlineの機能を使用してサイクルで何IntGetMessageWではありに思います。

私は、特に精通したwin32プログラミング、がんの基本メッセージループのメディアです。などの見からではない手動で--ではない私たちのコードをまとの交流と直接の原messageloop自体の複雑なものにアクセス可能な、コンポーネントのラインナップディスパッチャ.

当社のコンポーネントのラインナップ成分かち書きを受け継ぎからウィンドウが打ち出されている。-なければいけないのは制御/usercontrol)まで使用ShowDialogの高レベルのロジックと呼ばれShowDialogのサポート版のこのコンポーネント.あWindowsFormsIntegrationHost制御を使っていただきました内部コンポーネントのラインナップ部品の保存への対応当社には、現在ないような書き換えられるコンポーネントのラインナップ.

私について研究してきたこの数日間がいたらたくさんしていかなくてはいけません。もなくいろいろやって漠然との関連投稿が話入力メッセージ(マウスやキーボードもないわからない自分に何ができるかを検証すること。しかし、私たbutcheringのコードを削除毎にマウス-キーボード操作について

んなときでもどこでもこれは主に本線のコードは完全に分離されない親または子どものなんでもできるので、しっからの当社コード)に完全に不透明で何ができるのか、しています。

こちらはイメージのアリコグラフのShowDialog機能を示すパスの通話には:alt text

私は十分に実現するなど様々なことが考えられるだけることが可能になってコンポーネントのラインナップはその他のcomponenetsして書きコンポーネントのラインナップにな表示この動作は、ここだけのとっても不思議なグリプロファイラは、このポイントの検証が必要になるのであることが明らかになり誰もがんにちは、私は、またはその恐れのあちはもう私ができるのですが、自分のもてなしの良いカルマのでご安心下さいませ。

更新:への対応につ、ここには他のビューからアリ--これよりこの混乱いています(これは、リビュー"CPU時間"モード)になります。私は急検閲部品のコードが、システム関連の機能:

alt text

感謝!

役に立ちましたか?

解決

同じ問題に関する情報を探しているときにこれを見つけました。私が知っていることを追加して、それが役立つかどうかを確認します:

私はWinXPボックスで実行されています-WPFフレームワークは、XPよりもVistaとWin7に統合されています。これのいくつかは、WPFがXPデスクトップの「上」ではなく「上」に実行される方法が原因である可能性があります。

私は純粋なネイティブWPFアプリケーションを実行しています - WinFormsやその他のコードはありません。

私はこれに出くわし、なぜ窓をスクロールするだけで100%CPUとst音が消費するのかを判断しようとしました。

AQTime Performance Profilerを実行すると、eTgetMessageWがその100%CPU使用の最大の部分を占めることがわかります。これは、メッセージを待っているgetmessagewによるものではなく、関数が実際に行っていることによるものです。

私がまだ検討していないことの1つは、MutegetMessageWが速い方法ではなかった可能性があり、WPFが単純にそれを過剰に使用していることです。 WPFのデータバインディングは、Native Win32メッセージポンプを使用して、WPF内の依存関係プロパティを更新する可能性があります。その場合、私の窓があまりにも多くのバインディングを持っている可能性があります。

他のヒント

はい、これは正常です。 GUIアプリはすべてです いつも getMessageW()を実行し、Windowsがメッセージを送信するのを待っています。実際にこれを行うCPUサイクルを燃やすわけではなく、何らかの種類のUIイベントが合図されるまで内部同期オブジェクトをブロックしました。

もちろん、これによりUIアプリのプロファイリングが困難になります。アプリのサブコンポーネントをテストするユニットテストが本当に必要です。

がプロファイリング用に必要なものとを区別する 時間 方法により、 CPUサイクル 消費しているかが見えてきます。 多くのプロファイリングツールの全体の時間の過ごし方法-の場合のように顕 GetMessageW はかなり高くなっています。すべての活動のメインスレッドのGUIアプリケーションが表示されるのかな。ことになるというわけではありませんし...この月からのメッセージポンプの待機中の同期オブジェとしない実際に消費する。

私はあなたが開始用のサンプリングの特徴は、アリプロファイラの識別方法と呼ばれる 多く 相関、従来から知られていた方法をCPUサイクル。 お客さま人数小児-幼児のときは、決まりましたが器用ダイビングをさらに得らうためのグラフのように見えたことのある場所にはCPU集約的である。

まず疑い独自のコードです。 いる、というのも珍しいと思いるようなものコンポーネントのラインナップまたはWin32のインフラを担う可能性は高いCPU利用するる問題があるのかの実装です全体的に感がCPUサイクル過ごします。

もたらされたと考えられるこれまで過ごす時間を 学習の能力により、プロファイラ 最も効果的です。 プロファイラーで洗練された混乱の道具までとは何であるかを理解することをしようとしていることを示します。リンク先のtutoralからRedGateきを開始できない場合にはなっています。例えば、タイムラインビューが実際にできあが高いCPU活動が起こっている、拘束解析をセグメントの実行されます。

alt text

のグラフは他の有用なツールでアリです訓練の分野へのエクスポートするコードが最も高い。重要なことは、ていることを確認してくださいを見る 全体のコスト だけでなく、 全体の時間.

alt text

あなたのメッセージポンプがたくさん汲み上げられているように見えます。あなたのメッセージキューがどのようなメッセージに記入されているかを見るのは興味深いかもしれません。ウィンドウでSpy ++を使用して、何が起こっているのかを確認できますか?

編集

私は問題を誤解しました。

Hans Passantは正しいです、あなたのプログラムは、いくつかのイベントを処理するためにGetMessageを待っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top