1

我将一个 Delphi 桌面应用程序移植到 .NET(C#)。它们都使用 DevExpress 组件,并且必须通过 Remote Destop 连接使用。

远程桌面连接是一个慢速连接。当两者都通过远程桌面进行测试时;Delphi 应用程序似乎比 .NET 应用程序快得多。

在 .NET 中,页面像网页加载一样部分打开,但我希望页面在一部分中加载。

我能做到这一点吗?

PS。我使用 DevExpress 的 UserControl 组件作为页面(标签)。

聚苯乙烯。我取消了加载和启动屏幕组件的淡入淡出效果以加快速度。​</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 组件

这是应用程序中最复杂的页面之一。它是 DevExpress 的“XtraUserControl”用户控件实现(与 winforms 用户控件基本相同)。

我使用 DevExpress 的 LayoutControl > LayoutControlGroup > LayoutControlItem 组件来对齐用户控件上的组件(网格、按钮、文本框等)。

这是用户控件的主要容器(如上的页面):

作为包含用户控件(页面)的表单的主容器

Tabs(像这样的用户控件)的主要容器是 DevExpress 的“XtraForm”表单实现。当从容器表单中选择菜单项时,相关的用户控件(页面)作为选项卡项目加载到主容器表单上,用户可以在选项卡之间导航或从菜单打开新页面(用户控件)。

4

1 回答 1

8

自 2007 年以来,我一直在使用 DevExpress .Net 控件(有时还使用它们的控件源代码)。似乎我知道这些控件在 RDP 下出现视觉缺陷的可能原因。这些原因是:
-蒙皮技术(基于位图)
-双缓冲绘画

所以,让我解释一下。当用户通过远程桌面连接进行连接时,控件执行的所有绘图操作都通过网络连接传输到 RDP 客户端进行显示。如果控制绘制一条线,“DrawLine”命令通过网络发送到客户端。如果控件绘制文本,则发送“DrawText”命令(连同要绘制的文本)。但如果控件绘制位图,则需要通过网络传输整个位图。因此,这可能是使用低带宽连接时的主要瓶颈。

双缓冲绘画是基于对屏幕外位图执行所有绘画操作。然后使用BitBlt方法将此位图复制到屏幕上。这种技术在 DevExpress 控件中用于绘制各种视觉效果和流畅的动画。当控件的元素被快速重绘时,这避免了控件中的任何闪烁,也用于绘制蒙皮的控件元素(下面有更多详细信息)。但是当使用 RDP 时,BitBlt 操作也会作为整个位图通过网络传输,因此在使用低带宽连接时这是一个问题。

DevExpress Skinning 技术是基于位图的。皮肤是一组位图,用于确定应如何在所有可能的状态(正常、热跟踪、选择、按下等)中绘制控制元素。当控件绘制自身时,它会逐个元素地绘制这些位图。它允许 DevExpress 控件如此美丽和像素完美。
我从您的视频和屏幕截图中看到,您的 .Net 应用程序使用了皮肤(看起来具体的皮肤是“DevExpress 样式”),但您的 Delphi/VCL 应用程序没有皮肤。这是真的吗?我相信,是的。因此,减少应用程序缺陷的可能方法是禁用表单蒙皮并使用平面样式进行控制:

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

相关帮助主题:外观概览外观机制

我还应该注意,Flat-painting 不是双缓冲的,因此它可能是慢速 RDP 连接的一种可能的解决方案。

重要例外:某些 DevExpress 控件不支持平面绘制(例如 RibbonControl)。我知道 LayoutControl、XtraGrid 和大多数 XtraEditor 都支持平面绘制。您应该直接与 DevExpress 联系以了解其他控件。

PS @David Heffernan:感谢您为我指明正确的方向。
PPS 我在之前的评论中提到的所有事情都是真实的事情,它们可以在应用程序启动时和一般情况下提高应用程序的性能。但是这些事情与网络流量的原始问题无关。

更新
相关 DevExpress 支持文章:
如何加速在远程桌面服务(以前称为终端服务)环境中运行的 Windows 窗体应用程序

于 2013-08-15T05:41:01.807 回答