4

Windows Web 服务器 2008 R2 (x64) & .Net Framework 4.5

这是一个经典的 ASP.Net 网站(不是 web 项目,代码在App_Code目录中,并在网站启动时编译)

它依赖于/Bin目录中的许多参考 DLL。对于那些我有源代码的 DLL,我将它们编译为“x64”平台。

而且我还有一些其他没有源代码的DLL(mysql.data.dll / etc),它们被编译为“任何CPU”。我在EditBin.exe中修改了它们,以确保IMAGE_FILE_LARGE_ADDRESS_AWARE在它们的 PE 标头中指示标志。

根据这张表:http: //msdn.microsoft.com/en-us/library/aa366778%28VS.85%29.aspx#memory_limits

除非设置了IMAGE_FILE_LARGE_ADDRESS_AWARE ,否则 x64 进程不能使用超过 2GB 的内存。

如何验证它是否有效?有没有什么地方可以看到运行 x64 进程的内存限制?

4

2 回答 2

1

我不知道您是否真的可以明确说明“看到内存限制”(假设您不信任您引用的 MS 自己的文档),而不是动手并深入研究 IIS 和/或 ASP.NET 源代码.

话虽如此,您可以尝试对站点进行压力测试,并监控内存消耗(通过Task ManagerProcess Monitor),看看它是否超过 2GB。我会推荐IIS 6 Resource Kittinyget的一部分,它仍然可以与 IIS 7 一起使用

tinyget -svr:localhost -uri:/<your site> -loop:200 -threads:20

您必须使用循环和线程数来尝试将其推送到 2GB 以上。System.OutOfMemoryException当您接近大约 1.4GB 的组合物理和虚拟私有字节时,我希望看到一个。您可能希望在站点本身中创建压力测试功能,当然仅用于测试目的,这将通过使用与良好实践完全相反的方式帮助您达到此限制。您可以在此处阅读有关导致 System.OutOfMemoryException` 的更多信息,然后执行他们建议反对的事情。例如,添加一个仅在一个非常大的循环中连接字符串的测试方法。

于 2016-03-03T05:58:16.380 回答
0

尝试 procexp,来自 sysinternals here。此应用程序可以监控 .NET 特定指标。

不过,根据您的链接,您应该至少能够处理 8GB。

请记住,执行 IMAGE_FILE_LARGE_ADDRESS_AWARE 与您的情况无关。您可以将所有组件编译为针对“任何 CPU”,唯一检查的标志是可执行文件的标志。

于 2013-02-27T14:00:03.760 回答