コンパクトなフレームワーク - 軽量の GUI フレームワーク?[閉まっている]
-
09-06-2019 - |
質問
CF 上の Winform は少し重く、多くの Windows ハンドルを初期化するとかなりの時間とメモリを消費します。もう 1 つの問題は、二重バッファリングが組み込まれておらず、UI レンダリングを制御できないため、プロセッサに負荷がかかる操作中に UI がユーザーを半分レンダリングされた画面で見つめ続ける可能性があることです。ニース!
この問題を軽減するために、軽量の制御フレームワークを探します。すでに利用されているフレームワークはありますか、それとも自作する必要がありますか?
軽量とは、コントロールのペイントを完全に制御でき、高価なウィンドウ ハンドルをあまり使用しないコントロール ライブラリを意味します。
注記:私が UI スレッドを実行しすぎているとは思わないでください。あれは ない ケース。
解決
先日、これに遭遇しました。少なくとも出発点としては役立つかもしれません。 フィールド - Windows Mobile .NET タッチ コントロール. 。外観と操作性は優れていますが、デザイン時のサポートはありません。メモリフットプリントなどについてはあまり詳しくありませんが、すべてがダブルバッファリングされており、パフォーマンスはかなり優れているようです。
他のヒント
OK、ただ思いついたアイデアです...
同期オブジェクトを作成してみてはいかがでしょうか。アプリケーション内のクリティカル セクションまたは単一ロックは、ワーカー スレッドと gui スレッドの間で共有されます。ペイントをオーバーライドします。ペイントを開始するときは、他のすべてのスレッドをブロックして、スレッドが CPU を占有し、半分ペイントされた画面が残らないようにします。
(これはもちろん、ユーザーに美しい画像を提示することが最も重要なことであると仮定しています ;))
処理が少し遅く、ペイント イベントを制御できないため、プロセッサに負荷がかかる操作中、UI によってユーザーは半分レンダリングされた画面を見つめたままになる可能性があります。
一般に、UI スレッドで負荷の高いタスクを実行するのは悪い考えです。UI の応答性を維持するには、これらのタスクを ワーカースレッド
実際には、ペイント イベントをオーバーライドできます。
そして、長時間実行される操作を別のスレッドにオフロードするという考え方です。これは他のイベント駆動型フレームワークと何ら変わりません。 何でも Paint イベントの処理に依存するものは、その影響を受けやすくなります。
また、ペイント イベントがいつ発生するかを判断できるシステムはありません。この種のイベントは通常、アプリケーション (またはフレームワーク) の外部にあるウィンドウ マネージャー層によって発生します。イベントを自分で処理し、時々仕事をしないこともできますが、私はそれをお勧めしません。