2012-06-08 126 views
1

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

这种情况的公认解决方案是什么?这个服务应该产生一个单独的工作进程吗?我应该每个CPU有一个工作进程通过命名管道与主服务进行通信吗?

EDIT我们是一个64位服务器上运行,但不能因为目标成像库限制

64谢谢

+0

这是一个64位机吗?如果是,则构建您的程序集以将目标设置为x64,而不是x86。 – ken2k

+0

是的,不幸的是我无法定位到x64,因为目前还没有可以在该平台上运行的图像库。我们使用Leadtools。 –

+0

有完整源代码示例的最终解决方案? – Kiquenet

回答

2

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

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

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

编辑 我注意到C#标记在您的问题。对于托管应用程序,您仍然可以使用EditBin.exe tool使用大地址识别标志。

+0

在64位Windows上,大型地址感知应用程序实际上可以访问整个4 GB地址空间。 –

+0

谢谢。选项3不会给我太多,因为代码炸毁是必须是32位的。不幸的是,我没有选择2。从Windows服务中,选项4似乎被怀疑地看待。现在在选项1上 - 是否可以用于.net应用程序? –

+0

@布莱恩 - 从我个人的经验上次我做到了,我能够分配2.5 Gig。不是很完整的4 Gig,但肯定超过了2 Gig的默认限制。 –