0

問題があります。アプリケーションでイベント関連の情報を取得するため、イベント x の場合、何らかの操作を行う (テキストを入力してボタンをクリックする) フォーム ウィンドウを取得する必要があります。

私の問題は、私のアプリケーションには 10,000 のユーザー オブジェクトの制限があり (すべての C# アプリと同様)、既存のコードでは既に 3000 のユーザー オブジェクトが占有されていることです (そのため、約 7000 のユーザー オブジェクトが空いています)。200 のクライアントから、各クライアントで進行中のイベントに関する情報を受け取ります。

クライアントからイベントに関する情報を受け取ったときに、これをイベント ログ ウィンドウにラベルとして表示したいと思います。ラベルをクリックすると、特定のフォーム ウィンドウ (前述) がポップアップ表示されます。テキストを入力し、ボタンをクリックします。

このイベント ログ ウィンドウを効率的に表示できるようにする必要があります (すべてのクライアントから最大 1000 個のイベントを受け取ることができ、このログのすべてのラベルが 1 つのオブジェクトを占める場合、すべてのクライアントに対して 1000 個のオブジェクトが存在することになります (最大ですが、可能です) ) だから私は 10000 制限を大幅に超えてしまいます)。

どうすれば効率的に何かを行うことができますか?

現在、すべてのイベントで、テキストを入力してボタンをクリックするフォーム ウィンドウを起動しますが、これは効率的ではありません (フォーム ウィンドウが既に 3 つのユーザー オブジェクトを占有しており、最大 3 * 200 クライアント * 1000 ユーザー オブジェクトを超える場合)私の7000制限ははるかに)。

4

2 に答える 2

6

このようなユーザー インターフェイスから何千ものウィンドウを取得する方法を理解するのに苦労しています。個々の通知ごとに1 つのラベル コントロールを作成すると、はい、急いで手に負えなくなる可能性があります。それも恐ろしく遅くなります。

ラベル コントロールを使用しないでください。ListBox、ListView、TreeView、または DataGridView を使用してください。複数の項目を表示できるが、1 つのウィンドウ ハンドルしか消費しないコントロール。

于 2011-01-22T20:01:16.557 に答える
2

Hans Passant が言ったように、Win32 は、あなたが使用しようとしている方法で使用するようには設計されていません。

典型的な実装は次のようになります。

代替テキスト

アイテムが多数ある場合 (ご想像のとおり、数千個)、リスト内のアイテムをフィルター処理するためのクイック検索ボックスはほぼ必須です。

詳細が複雑な場合は、静的な Web ブラウザー コントロールをオンザフライで生成された HTML に置き換えることができます。


イベントごとのボタン (UX にはお勧めしません) を主張する場合は、GDI の PITA である自分でレンダリングする必要があります。または、Web ブラウザー コントロールを使用します。

于 2011-01-22T20:34:00.913 に答える