我正在学习WCF,LINQ和其他一些技术,从头开始编写自定义远程控制应用程序,如VNC.我在创建它时考虑到三个主要目标:
现在我正在使用WCF发送一个表示正在发送的窗口的字节数组:
using (var ms = new MemoryStream()) {
window.GetBitmap().Save(ms, ImageFormat.Jpeg);
frame.Snapshot = ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
GetBitmap实现:
var wRectangle = GetRectangle();
var image = new Bitmap(wRectangle.Width, wRectangle.Height);
var gfx = Graphics.FromImage(image);
gfx.CopyFromScreen(wRectangle.Left, wRectangle.Top, 0, 0, wRectangle.Size, CopyPixelOperation.SourceCopy);
return image;
Run Code Online (Sandbox Code Playgroud)
它然后通过WCF(TCPBinding,它将始终通过LAN)发送到客户端,并在没有边框的空白窗口形式重建,如下所示:
using (var ms = new MemoryStream(_currentFrame.Snapshot))
{
BackgroundImage = Image.FromStream(ms);
}
Run Code Online (Sandbox Code Playgroud)
我希望这个过程在CPU和内存使用方面尽可能高效,带宽排在第三位.我的目标是让客户端连接到5台服务器,每台服务器有10多个应用程序.
我现有的方法是最好的方法(同时继续使用这些技术)并且我能做些什么来改进它?
我正在研究的想法(但我没有经验):