Windows 8 Client Hyper-V and Windows Phone 7.x emulator slowdown

Hyper-V is a great platform for virtualization and luckily Windows 8 have inbuilt/integrated support for hyper-v technologies. Windows Phone 8 SDK uses hyper-v for emulator virtualization and it works pretty good with Visual Studio 2012. Hyper-V integrated to the Windows 8 is been called ‘Client Hyper-V’.

Client Hyper-V is the same virtualization technology previously available only in Windows Server®. A similar functionality in Windows 7 is called Windows XP Mode. Client Hyper-V enables you to run more than one 32-bit or 64-bit x86 operating system at the same time on the same host computer. But instead of working directly with the computer’s hardware, the operating systems run inside a virtual machine (VM). Hyper-V enables developers and IT professionals to easily maintain multiple test environments and provides a simple mechanism to quickly switch between these environments.

You can read more about it from MSDN Guide – Using Windows 8 Client Hyper-V

m-w630-windows-8-logo-620x322Windows-Phone-7_1-Mango-Logo

The problem is – Client Hyper-V have some inconsistencies with old Windows Phone 7.x emulators. The new Windows Phone 7.8 emulators works fine, but with older Windows Phone 7.x emulators you could experience the slow start-up/load of the emulator. It takes few minutes to launch in some systems, and in some high end multi core systems it launches in moments.

You will experience this problem when you want to develop and test for old Windows Phone 7.x devices, you will have problem in launching emulators.

From my experience and searching on Google the following thread help me to understand that it is a known problem with Windows 8 – Hyper-V and Windows Phone 7.x emulators. If you turn off Hyper-V for a while you can experience that Windows Phone 7.x emulators are launching instantly when you launch for debug/run.

http://social.msdn.microsoft.com/Forums/en-US/wptools/thread/2d149fee-a52e-4e2d-90d2-24e76639bd85/ 

So here is the dilemma scenario,

You want to develop an application that you want to test on both Windows Phone 7.x and Windows Phone 8.0 emulators

OR

You want to develop and application targeting Windows Phone 7.x using Visual Studio 2010 in Windows 8.

 

I have few steps to follow to toggle between the development environment, and depending on the system it is time taking, or little annoying – but we have to deal with it.

So I have to disable Hyper-V when I have to work on Windows Phone 7.x emulator.

Disable Hyper-V feature

Control panel -> Programs and Features -> Turn windows features on or off -> Uncheck Hyper-V feature.

hyper-v

Restart the machine.

NB: Enabling/Disabling Hyper-V will require you to restart to take effect.

But this is a time taking process and every time you will have to On/Off feature and restart. What we could have an option in Windows Boot itself – through which I can normally boot to Windows with Hyper-V or boot with Hyper-V disabled.

We can do that using hypervisorlaunchtype = off/on boot flag. 

An easy fix for this is to create a second boot entry for my system that starts Windows without starting the hypervisor.  To do this you need to open an administrative command prompt and run the following commands(follow steps below):

image

1. bcdedit /copy {current} /d "Windows 8 – no hypervisor"

This copies your currently active boot entry (assuming that this is the one you want to copy or select the appropriate one – if you are on a multi-boot environment) and gives the new copy the name you mentioned above ‘Windows 8 – no hypervisor’.

this will display a message in command prompt that “The entry was successfully copied to {some guid_identifier}”

 

2. bcdedit /set {guid_identifier} hypervisorlaunchtype off

guid_identifier is the identifier for the new boot entry (copy from the output of a plain ‘bcdedit’ command – we executed in step 1)} ,

Copy the {guid} from the command prompt window and run the above command appropriately replacing {guid_here} with {guid from your command window for the new boot entry}

hviosr_002

Now you have an additional boot entry, you can login in to your Windows 8 with hyper-v disabled mode and when you are done with it – You can reboot and select your default boot option(which is with Hype-V enabled).

1. When you want to work with Windows Phone 8.0 emulators select default boot option from boot menu.

2. When you want to work with Windows Phone 7.x emulators – select the newly created boot option from boot menu.

Hope that helps some of you – who worried with these kind of troubles with Windows Phone development.

Note: Some of you with kind of powerful systems will less experience these kind of issues. So this tip is for those who are in need. Smile