I support the "old" mobile application on the WM6 platform. We recently had to upgrade to new devices because the old device is no longer available. It also meant upgrading from WM6.1 to WM6.5, as well as from .NET CF 2.0 to 3.5.
The main problem with this application is the constant memory pressure (OutOfMemoryExceptions). I tried to fix memory leaks and also optimized certain code for memory consumption. However, the whole situation is much worse on the new device than on the older one. I understand that for each process there is a 32 MB virtual memory limit, regardless of how much physical memory is available ( interesting to read ).
I used VirtualMemory.exe and Motorola eMScript to visualize / analyze the 32 megabyte memory slot of my application. This is what the process’s virtual memory looks like (total 32 MB, each gray bar is 1 MB, the top one is a new device, the bottom one is an old device). All that is to the right of the red bar is third-party DLLs (OS, vendor, ...). We lost another 3 MB by switching to a new device.

It seems that the application suffers from a problem with the "DLL crunch" when some third-party DLLs occupy the virtual memory addresses on the right side (the highest addresses). Note. The blue bar on the left is occupied by the .exe file, I was able to eliminate this using this amazing trick .
So here is my question: how can I determine which dlls are occupying my address space? I tried eMScript, which gives a list with all the DLLs and their addresses, but not the ones to the right of the red bar (shared DLLs). And are there any general recommendations or tips on how to reduce this amount of lost address space? Someone recommended using the "reduced graphics driver", but I'm still not sure if this will be the solution to the correct problem.
The new device is the Motorola MC65, if that matters.
source share