我将Delphi桌面应用程序移植到.NET(C#)。 它们都使用DevExpress组件,它们必须通过Remote Destop连接使用。
远程桌面连接是一种缓慢的连接。 两者都通过远程桌面测试; Delphi应用程序似乎比.NET更快。
在.NET中,页面会像网页一样逐页打开,但我希望页面可以在一个部分中加载。
我可以实现吗?
PS。我使用DevExpress的UserControl组件作为页面(标签)。
PPS。我解除了加载和启动屏幕组件的淡入和淡出效果,以加快速度。
Delphi应用程序屏幕视频:http://www.youtube.com/watch?v=7mHHDsqe5Dg&feature=youtu.be
.NET应用程序屏幕视频:http://www.youtube.com/watch?v=P7N-FEcVoLQ&feature=youtu.be
更多细节:
这是应用程序中最复杂的页面之一。这是DevExpress的“XtraUserControl”用户控件实现(与winforms用户控件基本相同)。
我使用了LayoutControl> LayoutControlGroup> DevExpress的LayoutControlItem组件,用于在用户Control上对齐组件(网格,按钮,文本框等)。
以下是用户控件的主要容器(如上所示):
Tabs的主要容器(像这样的用户控件)是DevExpress的“XtraForm”表单实现。从“容器”表单中选择“菜单项”时,相关的UserControl(页面)将作为选项卡项加载到主容器表单上,用户可以在选项卡之间导航或从菜单中打开新页面(用户控件)。
答案 0 :(得分:8)
自2007年以来,我正在使用DevExpress .Net控件(有时还使用其控件源代码)。而且我似乎知道RDP下这些控件的视觉缺陷的可能原因。
这些原因是:
- 剥皮技术(基于位图)
- 双缓冲绘画
所以,让我解释一下。当用户通过远程桌面连接进行连接时,通过控制执行的所有绘图操作都将通过网络连接传输到RDP客户端以供显示。如果控件绘制一条线,则“DrawLine”命令通过网络发送到客户端。如果控件绘制文本,则发送“DrawText”命令(以及要绘制的文本)。 但是如果控件绘制位图,则需要通过网络传输整个位图。因此,当使用低带宽连接时,这可能是一个主要瓶颈。
双缓冲绘画基于对屏幕外位图执行所有绘制操作。然后使用BitBlt方法将此位图复制到屏幕上。这种技术在DevExpress控件中用于绘制各种视觉效果和流畅的动画。这可以避免控制元素快速重绘时控件中的任何闪烁,并且还用于绘制蒙皮控制元素(下面有更多详细信息)。 但是当使用RDP时,BitBlt操作也通过网络传输为整个位图,因此在使用低带宽连接时这是一个问题。
DevExpress Skinning technology是基于位图的。外观是一组位图,用于确定控制元素应如何在其所有可能状态(正常,热跟踪,选定,按下等)中绘制。当控制绘制本身时,它会逐个元素地绘制这些位图。它允许DevExpress控件如此美观和像素完美 我从你的视频和截图中看到你的.Net应用程序使用了皮肤(似乎具体皮肤是“DevExpress风格”),但你的Delphi / VCL应用程序没有皮肤。这是真的吗?我相信,是的。因此,减少应用程序缺点的可能方法是禁用表单蒙皮并使用平面样式进行控制:
// .NET application, Program.cs
...
DevExpress.Skins.SkinManager.DisableFormSkins();
DevExpress.Skins.SkinManager.DisableMdiFormSkins();
DevExpress.LookAndFeel.UserLookAndFeel.Default.SetFlatStyle();
...
相关帮助主题:Look And Feel Overview,Look and Feel Mechanism
我还应该注意,Flat-painting不是双缓冲的,因此它可能是慢速RDP连接的可能解决方案。
重要例外:某些DevExpress控件不支持Flat-painting(例如RibbonControl)。我知道LayoutControl,XtraGrid和大多数XtraEditor都支持平面绘画。您应该直接联系DevExpress了解其他控件。
P.S。 @David Heffernan:谢谢你指点我正确的方向 P.P.S. 我在评论中提到的所有事情都是真实的,可以在应用程序启动时提高应用程序的性能。但这些与网络流量的原始问题无关。
<强>更新强>
相关的DevExpress支持文章:
How to speed up Windows Forms applications, running in a Remote Desktop Services (formerly known as Terminal Services) environment