ges*_*sus 1 .net delphi devexpress remote-desktop winforms
我将Delphi桌面应用程序移植到.NET(C#).它们都使用DevExpress组件,它们必须通过Remote Destop连接使用.
远程桌面连接是一种缓慢的连接.两者都通过远程桌面测试; Delphi应用程序似乎比.NET更快.
在.NET中,页面逐页打开,就像网页一样,但我希望页面可以在一个部分中加载.
我可以做到这一点吗?
PS.我使用DevExpress的UserControl组件作为页面(标签).
PPS.我驳回了加载和闪屏组件加速的淡入和淡出效果.
德尔福应用程序屏幕视频:http://www.youtube.com/watch?v = 7mHHDsqe5Dg&feature = youroutu.be
.NET应用程序屏幕视频:http://www.youtube.com/watch?v = P7N-FEcVoLQ&feature = youroutu.be
更多细节:

这是应用程序中最复杂的页面之一.这是DevExpress的"XtraUserControl"用户控件实现(与winforms用户控件基本相同).
我使用DevExpress的LayoutControl> LayoutControlGroup> LayoutControlItem组件来对齐用户Control上的组件(网格,按钮,文本框等).
这是用户控件的主容器(如上所示):

Tabs的主要容器(像这样的用户控件)是DevExpress的"XtraForm"表单实现.从"容器"表单中选择"菜单项"时,相关的UserControl(页面)将作为选项卡项加载到主容器表单上,用户可以在选项卡之间导航或从菜单中打开新页面(用户控件).
我从2007年开始使用DevExpress .Net控件(有时还有自己的控件源代码).而且我似乎知道RDP下这些控件的视觉缺陷的可能原因.这些原因是:
- 剥皮技术(基于位图)
- 双缓冲绘画
所以,让我解释一下.当用户通过远程桌面连接进行连接时,通过控制执行的所有绘图操作都将通过网络连接传输到RDP客户端以供显示.如果控件绘制一条线,则"DrawLine"命令通过网络发送到客户端.如果控件绘制文本,则发送"DrawText"命令(以及要绘制的文本).但是如果控件绘制位图,则需要通过网络传输整个位图.因此,当使用低带宽连接时,这可能是一个主要瓶颈.
双缓冲绘画基于将所有绘图操作执行到屏幕外位图.然后使用BitBlt方法将此位图复制到屏幕上.这种技术在DevExpress控件中用于绘制各种视觉效果和流畅的动画.这可以避免控制元素快速重绘时控件中的任何闪烁,并且还用于绘制蒙皮控制元素(下面有更多详细信息).但是当使用RDP时,BitBlt操作也通过网络传输为整个位图,因此在使用低带宽连接时这是一个问题.
该DevExpress的剥皮技术是基于位图.外观是一组位图,用于确定控制元素应如何在其所有可能状态(正常,热跟踪,选定,按下等)中绘制.当控制绘制本身时,它会逐个元素地绘制这些位图.它允许DevExpress控件如此美观和像素完美.
我从您的视频和屏幕截图中看到您的.Net应用程序使用了皮肤(似乎具体皮肤是"DevExpress Style")但您的Delphi/VCL应用程序没有蒙皮.这是真的吗?我相信,是的.因此,减少应用程序缺陷的可能方法是禁用表单蒙皮并使用平面样式进行控制:
// .NET application, Program.cs
...
DevExpress.Skins.SkinManager.DisableFormSkins();
DevExpress.Skins.SkinManager.DisableMdiFormSkins();
DevExpress.LookAndFeel.UserLookAndFeel.Default.SetFlatStyle();
...
Run Code Online (Sandbox Code Playgroud)
我还应该注意,Flat-painting不是双缓冲的,因此它可能是慢速RDP连接的可能解决方案.
重要的例外:某些DevExpress控件不支持Flat-painting(例如RibbonControl).我知道LayoutControl,XtraGrid和大多数XtraEditor都支持平面绘画.您应该直接联系DevExpress了解其他控件.
PS @David Heffernan:谢谢你指点我正确的方向.
PPS我在评论中提到的所有事情都是真实的事情,可以在应用程序启动时提高应用程序的性能.但这些事情与网络流量的原始问题无关.
更新
相关的DevExpress支持文章:
如何加速在远程桌面服务(以前称为终端服务)环境中运行的Windows窗体应用程序