我有一个使用 VB6 DLL 的旧版 ASP Web 应用程序。该应用程序占用大量内存。我需要在一台机器上运行该应用程序的多个实例。现在,由于 VB6 DLL 仅为 32 位,因此无法在 64 位进程中运行 - 但是如果我运行多个 32 位 IIS 应用程序池怎么办?每个应用程序池是否会有 1.2 GB 的内存限制,或者所有应用程序池进程的内存限制是否合计?有谁有这方面的经验吗?
答案1
但是如果我运行多个 32 位 IIS 应用程序池会怎么样?每个应用程序池是否会有 1.2 GB 的内存限制,或者所有应用程序池进程的内存总和是否会有限制?
每个进程的限制适用于每个进程,每个应用程序池都有自己的进程。因此,您可以通过运行大量应用程序池来利用任意数量的内存。
而且不是1.2GB,而是4GB。
默认情况下,32 位进程会获得 2GB 的“用户空间”,除非 exe 是使用“大地址感知”标志构建的,在这种情况下,它在具有适当启动时间标志的 32 位操作系统上会获得 3GB(这会限制内核空间 - 产生其自身的后果)但在 64 位操作系统上,它是 4GB 的用户空间(不需要启动标志,也不会产生内核内存后果)。
32 位(托管应用程序池的可执行文件)是使用 Large Address Aware 标志构建的,从文件夹中w3wp.exe
运行可以看出。dumpbin /headers w3wp.exe
%SystemRoot%\SysWow64\inetsrv
答案2
只是为了在你的原帖中添加一点细微差别,你可以有效地从本机 IIS 64 位应用程序池中使用这个 32 位 DLL。
基本上,您必须使用 COM+ 组件服务封装此 DLL。这将花费您 5 分钟的时间,并且您可以使用常规的 Classic ASP 源代码,而无需进行任何更改(Server.CreateObject)。
我正在将此过程用于我的一些自定义 DLL,以及除 32 位 DLL 之外的任何其他版本中不再可用的其他 DLL。