这是 MSDN 上的一篇文章,似乎解决了您的问题(正如 John 在下面指出的,这仅适用于 Windows Server 2000,因此大多数人可能应该忽略):MSMQ 应用程序中的资源管理。具体来说:
对于 MSMQ 1.0 和 MSMQ 2.0,可以在一台机器上存储的消息的组合大小不限于机器中的 RAM 量或硬盘大小,而是提供给 MSMQ 的虚拟地址空间量由操作系统提供服务(此限制已在 MSMQ 3.0 中解除)。x86 机器中的每个进程都分配有一个虚拟的 4 GB 可寻址内存。2GB 保留用于内核模式,2GB 用于用户模式。MSMQ 队列管理器在用户模式下运行,因此有一个可寻址的 2GB 虚拟地址空间可供使用。每条消息的数据都存储在 RAM 中,由系统的页面文件或内存映射文件备份。MSMQ 使用内存映射文件来存储快速消息和可恢复消息。由于我们被限制为 2GB 的可寻址内存,我们被限制在磁盘上 2GB 的消息。考虑到 MSMQ 代码及其内部数据结构所使用的内存,以及在磁盘上存储消息文件的文件分配,我们最终可以在磁盘上存储 1.4GB 到 1.6GB 的消息。
注意 通过在 MSMQ 服务上启用 3GB 调整,可以将此 1.6GB 的限制提高到大约 2.6GB。有关如何启用 3GB 调整的更多信息,请参阅Q171793 。
编辑:调整链接似乎已损坏。我相信它应该指向这里。
关于更高版本的 MSMQ,John 在一篇博文中讨论了这个问题。
最大消息数
这个不是那么容易解决的。从我的资源不足的帖子中,我们知道每条消息需要 75 字节的内核内存来索引,因此,例如,200 万条消息需要大约 150 兆字节。因此,您需要做的似乎就是添加更多 RAM。但是,在查看了 32 位和 64 位内存架构的比较之后,您将很快不得不迁移到 64 位平台以充分利用您的投资,因为 32 位机器最多可以使用 450 MB 的分页池内存无论安装多少 RAM。
但是,同样,如果您试图计算出多少 RAM 将生成容纳十亿 MSMQ 消息所需的分页池内存,那么您的设计规范需要进行一些认真的审查。