C# 多线程/多进程windows服务

C# 多线程/多进程windows服务,c#,memory,windows-services,C#,Memory,Windows Services,我创建了一个多线程服务来执行图像处理。在我们的一个客户将该产品安装在一个具有大量内存的16进程服务器中之前,一切正常。现在,该服务抛出大量内存不足错误,这是可以理解的,因为无论安装了多少,进程只能获得1.5GB的内存 对于这种情况,公认的解决方案是什么?该服务是否应该派生出一个单独的工作进程?我应该让每个CPU有一个工作进程通过命名管道与主服务通信吗 编辑我们正在64位服务器上运行,但由于映像库的限制,无法以x64为目标 谢谢有多种解决方案。以下是一些选项: 将您的.exe链接到。这将为你的应用

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

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

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


谢谢

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

  • 将您的.exe链接到。这将为你的应用程序提供高达3 Gig的RAM,并且不需要进行其他更改
  • 询问为您提供64位版本的32位二进制文件的软件供应商
  • 将32位依赖项移出proc(例如通过COM或WCF通信),并将EXE体系结构更改为64位
  • 为每个执行操作生成新进程,而不是线程
  • 将您的代码转换为使用
  • 选项1和选项2最容易实现,选项5最难实现

    编辑
    我注意到你的问题中有标签。对于托管应用,您仍然可以使用大地址识别标志。

    这是64位机器吗?如果是,则将程序集构建为目标x64,而不是x86。是的,很遗憾,我无法以x64为目标,因为到目前为止还没有可以在该平台上运行的映像库。我们使用Leadtools。是否有完整源代码示例的最终解决方案?@Kiquenet-/largeaddressware是最有效的选项。在64位Windows上,大型地址感知应用程序实际上可以访问整个4 GB地址空间。谢谢。选项3不会给我太多,因为代码爆炸必须是32位的。不幸的是,我没有选择2。在windows服务上执行选项4时,人们似乎持怀疑态度。现在是选项1——这对.net应用程序来说可能吗?@Brian——根据我上次的个人经验,我可以分配2.5千兆。不是全部4 Gig,但绝对超过2 Gig的默认限制。@Otávio Décio,-是的,你可以在应用程序构建后使用EditBin来修复它。@SevaTitov:当你说分配时,我假设你在谈论应用程序的托管部分。该进程将获得整个4GB地址空间,但显然这将保存.NET运行时和应用程序。因此,您的托管应用程序将无法自行分配4GB。该进程可以使用4GB。我只是指出,操作系统不需要像32位操作系统那样使用地址空间的任何部分。