Windows Web Server 2008 R2(x64)& .Net Framework 4.5
这是一个经典的ASP.Net网站(不是网络项目,代码在 App_Code 目录中,并在网站启动时编译)
它取决于 / Bin 目录中的许多参考DLL。 对于那些我有源代码的DLL,我将其编译为“x64”平台。
我还有其他一些没有源代码的DLL(mysql.data.dll / etc),它们编译为“Any CPU”。
我在 EditBin.exe 中对它们进行了修改,以确保在其标头中显示IMAGE_FILE_LARGE_ADDRESS_AWARE
标志。
根据此表: http://msdn.microsoft.com/en-us/library/aa366778%28VS.85%29.aspx#memory_limits
除非设置了 IMAGE_FILE_LARGE_ADDRESS_AWARE ,否则x64进程无法使用超过2GB的内存。
如何验证是否有效? 有没有可以看到运行x64进程的内存限制的地方?
答案 0 :(得分:1)
我不知道你是否真的可以“看到内存限制”明确声明(假设你不相信你引用的MS自己的文档),除了亲自动手并深入研究IIS和/或ASP。 NET源代码。
话虽这么说,您可以尝试对网站进行压力测试,并监控内存消耗(通过Task Manager
或Process Monitor
),看看它是否超过2GB。我会推荐tinyget
,IIS 6 Resource Kit的一部分,can still be used with IIS 7。
tinyget -svr:localhost -uri:/<your site> -loop:200 -threads:20
你必须使用循环和线程计数来尝试将其推到2GB以上。当你接近大约1.4GB的物理和虚拟专用字节时,我希望看到System.OutOfMemoryException
。您可能希望在站点本身创建压力测试功能,仅用于测试目的,这将通过使用与良好实践完全相反的方式帮助您达到此限制。您可以阅读有关导致System.OutOfMemoryException` here的更多信息,然后执行他们建议的操作。例如,添加一个只在非常大的循环中连接字符串的测试方法。
答案 1 :(得分:0)
从sysinternals here尝试procexp。此应用程序可以监视.NET特定的指标。
然而,根据您的链接,您应该能够至少解决8GB。
请注意,在您的情况下,强制执行IMAGE_FILE_LARGE_ADDRESS_AWARE无关紧要。您可以将所有组件编译为“任何CPU”,唯一检查的标志是可执行文件的标志。