多线程/多进程窗口服务

时间:2012-06-08 14:01:20

标签: c# memory windows-services

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

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

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

谢谢

1 个答案:

答案 0 :(得分:2)

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

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

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