还是开心的那个问题,我试了一下,问题是存在的,使用彭刚给出的工具,我得到了下面的报告(我的系统是Win2K3 + .NET FX 1.1,程序编译为debug版本):
First start
-------------------------------------------------------------------------------------
Totle Private Shareable Shared
Pages KBytes KBytes KBytes KBytes
Grand Total Working Set 3723 14892 4736 2940 7216
Module Working Set Contributions in pages
Total Private Shareable Shared Module
4 2 2 0 ddddd.exe
77 4 0 73 ntdll.dll
27 3 0 24 mscoree.dll
57 4 0 53 KERNEL32.dll
30 3 0 27 ADVAPI32.dll
40 2 0 38 RPCRT4.dll
34 2 0 32 SHLWAPI.dll
32 2 0 30 GDI32.dll
49 2 0 47 USER32.dll
34 4 0 30 msvcrt.dll
13 2 0 11 IMM32.DLL
8 2 0 6 LPK.DLL
34 4 0 30 USP10.dll
248 21 0 227 mscorwks.dll
47 6 1 40 MSVCR71.dll
39 3 0 36 fusion.dll
31 8 0 23 SHELL32.dll
17 2 0 15 comctl32.dll
251 2 0 249 mscorlib.dll
317 62 255 0 mscorlib.dll
37 3 0 34 diasymreader.dll
25 4 0 21 ole32.dll
14 2 0 12 mscorsn.dll
54 3 0 51 MSCTF.dll
6 2 0 4 Cjktl32.dll
277 1 141 135 system.windows.forms.dll
273 40 233 0 system.windows.forms.dll
171 1 0 170 system.dll
451 385 66 0 system.dll
63 2 0 61 MSCORJIT.DLL
76 1 0 75 system.drawing.dll
200 169 31 0 system.drawing.dll
9 1 0 8 apphelp.dll
41 36 0 5 msctfime.ime
26 3 1 22 gdiplus.dll
11 2 0 9 Msimtf.dll
4 1 0 3 VERSION.dll
----------------------------------------------------------------------------------------
Minimized
----------------------------------------------------------------------------------------
Totle Private Shareable Shared
Pages KBytes KBytes KBytes KBytes
Grand Total Working Set 169 676 416 64 196
Module Working Set Contributions in pages
Total Private Shareable Shared Module
6 1 0 5 ntdll.dll
3 1 0 2 KERNEL32.dll
11 2 0 9 USER32.dll
5 2 0 3 IMM32.DLL
18 4 0 14 mscorwks.dll
11 6 5 0 mscorlib.dll
7 2 0 5 MSCTF.dll
22 12 10 0 system.windows.forms.dll
8 8 0 0 msctfime.ime
----------------------------------------------------------------------------------------
Restored
----------------------------------------------------------------------------------------
Totle Private Shareable Shared
Pages KBytes KBytes KBytes KBytes
Grand Total Working Set 540 2160 968 300 892
Module Working Set Contributions in pages
Total Private Shareable Shared Module
25 2 0 23 ntdll.dll
11 1 0 10 KERNEL32.dll
10 3 0 7 ADVAPI32.dll
13 2 0 11 GDI32.dll
31 2 0 29 USER32.dll
1 0 0 1 msvcrt.dll
8 2 0 6 IMM32.DLL
5 2 0 3 LPK.DLL
7 0 0 7 USP10.dll
60 7 0 53 mscorwks.dll
1 0 0 1 MSVCR71.dll
49 23 26 0 mscorlib.dll
44 3 0 41 MSCTF.dll
3 1 0 2 Cjktl32.dll
77 29 48 0 system.windows.forms.dll
8 8 0 0 system.dll
14 14 0 0 system.drawing.dll
11 11 0 0 msctfime.ime
2 2 0 0 gdiplus.dll
2 1 0 1 Msimtf.dll
-----------------------------------------------------------------------------------------
可以看出,程序启动时加载了许多系统和应用程序模块(比如Cjktl32.dll就是金山词霸的dll),这可能是为了JIT的需要(MSCORJIT.DLL),在最小化时这些模块被卸载了,还原之后,就只剩下了程序运行所需的模块了。这看起来是内存变化的主要原因。
如果程序不被最小化,那些JIT用到的模块什么时候被卸载呢?