1

我创建了一个多线程服务来执行图像处理。一切正常,直到我们的一位客户将产品安装在具有大量内存的 16 进程服务器中。现在服务抛出了很多内存不足的错误,这是可以理解的,因为无论安装多少进程都只能获得 1.5GB 的内存。

这种情况下可接受的解决方案是什么?该服务是否应该产生一个单独的工作进程?每个 CPU 是否应该有一个工作进程通过命名管道与主服务通信?

编辑我们在 64 位服务器上运行,但由于映像库的限制,无法定位 x64

谢谢

4

1 回答 1

2

有多种解决方案。这些是一些选项:

  1. 将您的 .exe 与/LARGEADDRESSAWARE 选项链接。这将为您的应用程序提供高达 3 Gig 的 RAM,并且无需进行其他更改。
  2. 询问为您提供 64 位版本的 32 位二进制文​​件的软件供应商。
  3. 将您的 32 位依赖项移出 proc(例如通过 COM 或 WCF 进行通信),并将您的 EXE 架构更改为 64 位。
  4. 为每个执行操作生成新进程,而不是线程。
  5. 将您的代码转换为使用Address Windowing Extensions

选项#1 和#2 是最容易实现的,#5 是最困难的。

编辑我注意到C#你的问题中有标签。对于托管应用程序,您仍然可以使用EditBin.exe 工具使用大型地址感知标志。

于 2012-06-08T14:51:35.267 回答