我正在调查一个与我的应用程序相关的奇怪问题,在两个版本的Windows上行为不同:
在失败时,进程大小约为2.3GB。请注意,已设置注册表键以允许进程超过默认的最大进程大小2GB(在32位操作系统上)。
失败的系统是对
我注意到的是,在XML解析在Windows XP上失败的那一点,Windows Server 2008上的进程大小只有约1GB(换句话说,大约是Windows XP上进程大小的一半)。
XML解析在Windows Server 2008上不会失败,所有内容都按预期工作。
我的问题是:
- Windows XP(32位)
- Windows Server 2008(64位)
Windows XP(32位)
当运行我的测试方案时,XML解析器在解析非常大的配置文件时在某个点上失败(有关更多信息,请参见this question)。在失败时,进程大小约为2.3GB。请注意,已设置注册表键以允许进程超过默认的最大进程大小2GB(在32位操作系统上)。
失败的系统是对
IXMLDOMDocument::load()
的调用,如上面链接的问题所述。
Windows Server 2008(64位)
我在Windows Server 2008中运行了完全相同的测试方案 -- 唯一的变量是操作系统。 当我在任务管理器下查看我的进程时,它旁边有一个* 32
,我认为这意味着它正在以32位兼容模式运行。我注意到的是,在XML解析在Windows XP上失败的那一点,Windows Server 2008上的进程大小只有约1GB(换句话说,大约是Windows XP上进程大小的一半)。
XML解析在Windows Server 2008上不会失败,所有内容都按预期工作。
我的问题是:
为什么在64位操作系统上以32位模式运行的应用程序会消耗一半的内存?它是真的使用了一半的内存,还是在使用虚拟内存方面有所不同,或者是其他原因?
承认我的应用程序在Windows Server 2008上似乎只使用了一半的内存,但是有没有人想过为什么在Windows XP上XML解析会失败?每次我运行测试用例时,通过
IXMLDOMParseError
访问的错误(参见this answer)都是不同的。由于这似乎是不确定性的,这表明我遇到了内存使用问题,而不是处理格式错误的XML。
*32
表示它正在运行在 WOW64 中,这是一个用于 32 位应用程序的兼容性层:http://en.wikipedia.org/wiki/WOW64 - Georg Fritzsche