1

Delphi デスクトップ アプリケーションを .NET(C#) に移植しました。どちらも DevExpress コンポーネントを使用しており、Remote Destop 接続を介して使用する必要があります。

リモート デスクトップ接続は低速接続です。両方がリモート デスクトップでテストされている場合。Delphi アプリケーションは、.NET アプリケーションよりもはるかに高速のようです。

.NET では、ページは Web ページのロードのように部分的に開いていますが、ページを 1 つの部分にロードしたいと考えています。

これを達成できますか?

PS。DevExpress の UserControl コンポーネントをページ(タブ)として使用しました。

PPS。高速化のために、ロードおよびスプラッシュ スクリーン コンポーネントのフェード インおよびフェード アウト効果を無視しました。</p>

Delphi アプリケーション画面のビデオ: http://www.youtube.com/watch?v=7mHHDsqe5Dg&feature=youtu.be

.NET アプリケーション画面のビデオ: http://www.youtube.com/watch?v=P7N-FEcVoLQ&feature=youtu.be

いくつかの詳細:

UserControl コンポーネントとしての販売処理ページ

これは、アプリケーションで最も複雑なページの 1 つです。これは、DevExpress の "XtraUserControl" ユーザー コントロールの実装です (基本的には winforms ユーザー コントロールと同じです)。

ユーザー コントロールのコンポーネント (グリッド、ボタン、テキスト ボックスなど) を配置するために、DevExpress の LayoutControl > LayoutControlGroup > LayoutControlItem コンポーネントを使用しました。

ユーザー コントロールのメイン コンテナ (上記のようなページ) は次のとおりです。

ユーザー コントロール (ページ) を格納するためのフォームとしてのメイン コンテナー

タブ (このようなユーザー コントロール) のメイン コンテナーは、DevExpress の「XtraForm」フォーム実装です。コンテナ フォームからメニュー項目が選択されると、関連する UserControl(Page) がメイン コンテナ フォームにタブ項目としてロードされ、ユーザーはタブ間を移動したり、メニューから新しいページ (ユーザー コントロール) を開くことができます。

4

1 に答える 1

8

私は 2007 年以来、DevExpress .Net コントロール (および時にはコントロールのソース コード) を使用しています。RDP でのこれらのコントロールの視覚的な欠点の考えられる理由を知っているようです。これらの理由は次のとおりです。
-スキニング テクノロジ(ビットマップ ベース)
-ダブル バッファ ペインティング

それでは、説明させてください。ユーザーがリモート デスクトップ接続を介して接続されている場合、コントロールによって実行されるすべての描画操作は、表示のためにネットワーク接続を介して RDP クライアントに転送されます。コントロールが線を引く場合、「DrawLine」コマンドがネットワーク経由でクライアントに送信されます。コントロールがテキストを描画する場合、「DrawText」コマンドが (描画するテキストと共に) 送信されます。ただし、コントロールがビットマップを描画する場合は、ビットマップ全体をネットワーク経由で転送する必要があります。したがって、低帯域幅接続を使用する場合、これが主なボトルネックになる可能性があります。

ダブル バッファ ペインティングは、すべての描画操作をオフスクリーン ビットマップに実行することに基づいています。次に、このビットマップをBitBltメソッドを使用して画面にコピーしています。この手法は、DevExpress コントロールで使用され、さまざまな視覚効果とスムーズなアニメーションを描画します。これにより、コントロールの要素がすばやく再描画されるときのコントロールのちらつきが回避され、スキンされたコントロール要素の描画にも使用されます (詳細は後述)。ただし、RDP を使用すると、BitBlt 操作もビットマップ全体としてネットワーク経由で転送されるため、低帯域幅接続を使用する場合に問題になります。

DevExpressスキニング テクノロジはビットマップ ベースです。スキンは、可能なすべての状態 (通常、ホットトラック、選択、押された状態など) でコントロール要素をどのようにペイントするかを決定するビットマップのセットです。コントロールがそれ自体をペイントするとき、要素ごとにこれらのビットマップを描画します。これにより、DevExpress コントロールを非常に美しくピクセルパーフェクトにすることができます。
あなたのビデオとスクリーンショットから、あなたの .Net アプリケーションはスキンを使用していることがわかります (具体的なスキンは "DevExpress スタイル" のようです) が、Delphi/VCL アプリケーションはスキンされていません。本当ですか?はい、そう思います。したがって、アプリケーションの欠点を減らすために考えられる方法は、フォームのスキニングを無効にし、コントロールにフラット スタイルを使用することです。

// .NET application, Program.cs
...
DevExpress.Skins.SkinManager.DisableFormSkins();
DevExpress.Skins.SkinManager.DisableMdiFormSkins();
DevExpress.LookAndFeel.UserLookAndFeel.Default.SetFlatStyle();
...

関連ヘルプ トピック:ルック アンド フィールの概要ルック アンド フィールのメカニズム

また、フラットペインティングはダブルバッファリングされていないため、低速の RDP 接続の解決策になる可能性があることにも注意してください。

重要な例外: 一部の DevExpress コントロールは、フラット ペインティングをサポートしていません (たとえば、RibbonControl)。LayoutControl、XtraGrid、およびほとんどの XtraEditor がフラット ペインティングをサポートしていることは知っています。別のコントロールについては、DevExpress に直接問い合わせてください。

PS @David Heffernan: 正しい方向に向けてくれてありがとう。
PPS 以前のコメントで言及したことはすべて、アプリケーションの起動時および一般的にアプリケーションのパフォーマンスを向上させることができる真のものです。しかし、これらのことは、ネットワーク トラフィックの元の問題とは無関係です。

更新
関連の DevExpress サポート記事:
リモート デスクトップ サービス (以前のターミナル サービス) 環境で実行されている Windows フォーム アプリケーションを高速化する方法

于 2013-08-15T05:41:01.807 に答える