Why doesn’t Virtual PC use the right refresh rate in full screen mode?

A number of people have noted that when they put a virtual machine into full screen mode under Virtual PC – it appears to use very low refresh rates (which can result in visual ‘flickering’ on CRT monitors).  They have also noted that this happens no matter what they select for the refresh rate inside of the guest operating system.

The reason that this happens is that Virtual PC does not allow the guest operating system to actually dictate the refresh rate to be used by our emulated display.  Much rather we simply use whatever the host operating system is using.  While this makes complete sense (and works perfectly) when we are running in windowed mode – it causes problems when we go into full screen mode.

The root cause of the problem is that we use DirectX to draw our display in full screen mode – which in turn means that DirectX is responsible for choosing the refresh rate of the screen.  And for some reason, DirectX tends to use incredibly low refresh rates.

You can work around this issue by ‘overriding’ the refresh rates used by DirectX.  The risk of overriding the refresh rate is that you may pick one that is too high for your monitor to display.  There are two possible ways to override your DirectX refresh rate:

  1. A number of video card drivers allow you to override this manually (the drivers for my Nvidia video card allow for this)
  2. You can use a Microsoft utility called ‘dxdiag’ and go to the ‘More Help’ tab and select ‘Override…’

Or – alternatively – you could go out and get an LCD monitor :-)