多线程/多进程窗口服务

本文关键字:服务 窗口 多进程 多线程 | 更新日期: 2023-09-27 18:36:46

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

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

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

谢谢

多线程/多进程窗口服务

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

  1. 将您的.exe与/LARGEADDRESSAWARE 选项链接。这将为您的应用程序提供高达 3 GB 的 RAM,并且不需要其他更改。
  2. 询问为您提供 64 位版本的 32 位二进制文件的软件供应商。
  3. 将 32 位依赖项移出进程(例如,通过 COM 或 WCF 进行通信),并将 EXE 体系结构更改为 64 位。
  4. 为每个执行操作生成新进程,而不是线程。
  5. 转换代码以使用地址窗口化扩展插件。

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

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