10000ユーザーオブジェクトの制限を超えないように、効率的なユーザーインタラクティブイベントログを設計します。
-
22-10-2019 - |
質問
問題があります。アプリケーションでは、イベント関連の情報が表示されるため、イベントXには、ある種のことをするフォームウィンドウを取得する必要があります(テキストを入力してボタンをクリックしてください)
私の問題は、私のアプリケーションには10,000個のユーザーオブジェクト制限があり(すべてのC#アプリについて)、既存のコードにはすでに3000個のユーザーオブジェクトが占有されていることです(約7000個のユーザーオブジェクトを無料で残します)。私は、各クライアントに行くものに関するイベントに関する200のクライアント情報を受け取ります。
クライアントからイベントに関する情報を受け取ったら、イベントログウィンドウにラベルとしてこれを表示したいと思います。ラベルをクリックすると、特定のフォームウィンドウ(前述の)がポップアップする必要があります。テキストを入力して、ボタンをクリックします。
このイベントログウィンドウを効率的に表示できる必要があります(すべてのクライアントから最大1000のイベントを受信できるため、このログのすべてのラベルが1つのオブジェクトを占める場合、すべてのクライアントに1000のオブジェクトがあります(最大ですが可能ですが可能です)したがって、私は10000の制限を大幅に超えます)。
どうすれば効率的に何かをすることができますか?
現在、すべてのイベントで、テキストを入力してボタンをクリックするフォームウィンドウを起動しますが、これは効率的ではありません(フォームウィンドウはすでに3つのユーザーオブジェクトを占有しているため、最大3 * 200クライアントがある場合 * 1000ユーザーオブジェクトを超えています。私の7000の制限ははるかに)。
解決
このようなユーザーインターフェイスから何千ものWindowsを取得する方法を確認するのに苦労しています。作成する場合 1 個々の通知ごとにラベルコントロールは、はい、急いで手に負えないものになる可能性があります。それを恐ろしく遅くします。
ラベルコントロールを使用しないで、ListBox、ListView、TreeView、DatagridViewを使用してください。複数のアイテムを表示できますが、1つのウィンドウハンドルのみを消費するコントロール。
他のヒント
Hans Passantが言ったように、Win32はあなたがそれを使用しようとしている方法で使用されるように設計されていません。
典型的な実装は次のようになります。
多くのアイテムがある場合(予想どおり数千)、リスト内のアイテムをフィルタリングするためのクイック検索ボックスがほぼ必須です。
詳細が複雑な場合は、静的Webブラウザーコントロールをその場で生成されたHTMLに置き換えることができます。
イベントあたりボタン(UXにはお勧めしない)を主張する場合は、GDIのピタである自分でレンダリングする必要があります。または、Webブラウザーコントロールを使用します