The measurements are done with UltraVNC viewer 1.0.5.6 and 1.0.6.4.
I simply start a timer before ReadscreenUpdate call and stop it when it returns.
On the server I have a small program which generates screen changes.
This program generates 512x512 'noise' images or 512x512 checkboard images.
I can also regulate the speed it performs the update.
For this measurement i set it to 1 or 0.5 fps. (So the server isn't stressed)
Basically I used zrle with 8 gray colors or 256 colors on a local network.
I tried also some other settings like full color and Hextil encoding but in general the times i measure are the same.
I'm running the viewer on 8 core Xeon E5420 @ 2.50 Ghz and a nVidia Quadro NVS 290 but target viewer systems are desktop and laptops and remote view with smaller bandwith (ZRLE, 8 gray colors, 256 colors)
What measure is a time between 225mSec up to 400 mSec
![Sad :(](./images/smilies/_icon_sad.gif)
I measure simular times when using check board images.
(Full collor, Hextile, Check board gives 10 mSec which is an exception)
I tried this also with the RealVNC viewer which results in a process time of 10mSec with zrle and 20 mSec when using raw encoding. Using check board images and zrle results in an update time of 2 mSecs
![Razz :P](./images/smilies/_icon_razz.gif)
Of course is a 512x512 noise image is a kind of worst case
![Twisted Evil :twisted:](./images/smilies/_icon_twisted.gif)
On the other hand this worst case situation makes it extremely visible.
Looking at the measurements the update time is very long resulting an update speed of only 4 fps. Compared this to real vnc is 20+ time faster.
I tried to find where the most of the time is spend and i found that a call to IMAGE_RECT uses most time. IMAGE_RECT can be broken down to a loop with SetPixelV. (RealVNC uses a loop with some mem copies).
Can someone explain why Ultra Viewer is that slow and even better what can be done to make the viewer faster.
Of course it could be that I missed somewhere something so feel free to point it out so my/our understanding increases.
The easy way to say 'use RealVNC' is an option but UltraVNC offers a lot of extra functionalit.
I hope that my findings can contribute to a better (and faster) UltraVNC
![Cool 8)](./images/smilies/_icon_cool.gif)