none
RDP协议下GDI多线程渲染效率 RRS feed

  • 问题

  • 服务器(8逻辑核心)上使用GDI实现了一个多线程(8线程)的绘制程序(主要执行绘制任务)。

    使用mstsc.exe远程连接服务器,启动该绘制程序,发现该程序多线程反而比单线程执行效率更慢。(查看服务器cpu利用率很低)

    如果不使用mstsc.exe远程,直接本机登录运行,多线程执行效率高单线程8倍。

    查找微软相应文档,发现mstsc.exe使用RDP协议,该协议下,服务端的GDI绘制命令被传输到客户端(用来远程的机器)上绘制了。

    请问:使用mstsc.exe远程情况下,此问题有没有好的解决办法?

    2017年9月3日 4:28

全部回复

  • Hi,

    感谢你在MSDN论坛发帖。

    根据我知道的 RDP协议下面封装的是UDP的网络传输协议,但是他是可以控制整个传输过程中的节奏,所以就不像UDP那样,只管发送数据,对面接受到还是没接受到,这个他是不管的,但是RDP就不可以了,它是有自己的控制协议的,这样就会导致传输速度慢了下来。这也许就是根本的原因。

    根据我的了解,这个Mstsc 程序被用在下面windows操作系统版本中。

    Applies To: Windows Vista, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows 8 . 你是在这些平台上面使用的吗?

    而且 这个程序的使用的参数,也没有提到如何提高传输速度。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 .giser 2017年9月11日 7:24
    • 取消答案标记 .giser 2017年9月11日 7:24
    2017年9月4日 9:06
    版主
  • 不知道你怎么画的。如果你用了双缓冲,那么传送的是缓冲里的位图而不是画到缓冲里的指令,这会占用很多带宽。

    检测你的运行环境,如果是在远程桌面下运行,那么禁用那些会造成位图传输到客户端的画图代码(例如背景图或者双缓冲)。



    Visual C++ MVP

    2017年9月10日 16:04
    版主
  • 不知道你怎么画的。如果你用了双缓冲,那么传送的是缓冲里的位图而不是画到缓冲里的指令,这会占用很多带宽。

    检测你的运行环境,如果是在远程桌面下运行,那么禁用那些会造成位图传输到客户端的画图代码(例如背景图或者双缓冲)。


    你好

    我两台电脑操作系统都是Windows Server 2008 R2,物理机,非虚拟机。

    我的程序很简单,就是为了测试这个问题的一个MFC程序。逻辑如下:

    总共100万个区的GDI绘制任务,开不同线程数共同来完成,完成时统计时间长度。

    开1个线程来完成耗时T1,开2个线程来共同完成(每个线程50万个绘制任务)耗时T2,开4个线程工程完成(每个线程25万个绘制任务)耗时T4

    测试1:正常直接登陆服务器情况下(非远程登陆)::T1=10秒  T2=5秒  T4=3秒。

    测试2:通过MSTSC远程登陆服务器运行:T1=10秒  T2=12秒 T4=14秒。

    我使用Teamviewer方式远程发现测试结果同测试1.


    2017年9月11日 7:27
  • Hi,

    感谢你在MSDN论坛发帖。

    根据我知道的 RDP协议下面封装的是UDP的网络传输协议,但是他是可以控制整个传输过程中的节奏,所以就不像UDP那样,只管发送数据,对面接受到还是没接受到,这个他是不管的,但是RDP就不可以了,它是有自己的控制协议的,这样就会导致传输速度慢了下来。这也许就是根本的原因。

    根据我的了解,这个Mstsc 程序被用在下面windows操作系统版本中。

    Applies To: Windows Vista, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows 8 . 你是在这些平台上面使用的吗?

    而且 这个程序的,也没有提到如何提高传输速度。

    Best Regards,

    Hart

    你好

    我两台电脑操作系统都是Windows Server 2008 R2,物理机,非虚拟机。

    我的程序很简单,就是为了测试这个问题的一个MFC程序。逻辑如下:

    总共100万个区的GDI绘制任务,开不同线程数共同来完成,完成时统计时间长度。

    开1个线程来完成耗时T1,开2个线程来共同完成(每个线程50万个绘制任务)耗时T2,开4个线程工程完成(每个线程25万个绘制任务)耗时T4

    测试1:正常直接登陆服务器情况下(非远程登陆)::T1=10秒  T2=5秒  T4=3秒。

    测试2:通过MSTSC远程登陆服务器运行:T1=10秒  T2=12秒 T4=14秒。

    我使用Teamviewer方式远程发现测试结果同测试1.


    2017年9月11日 7:27
  • Hi,

    如果是用微软提供的remote 访问API来代替MSTSC这个远程登陆呢?

    你有这样测试过吗?

    https://msdn.microsoft.com/en-us/library/windows/desktop/bb545687(v=vs.85).aspx

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年9月12日 8:57
    版主