如何在使用多个任务时克服OutOfMemory情况

时间:2014-10-02 10:11:14

标签: c# multithreading service out-of-memory task

我在C#中有一个可以作为Windows服务或控制台应用程序运行的应用程序。

此应用程序维护单个作业队列(对它的任何访问都是相互排除的),并且在任何时候都可以使用Tasks(来自.NET)同时运行N个最大作业。应用程序的主线程不会等待任务完成。

在一段时间后重复触发计时器并尝试处理新作业。作业加载和处理大文件大小(500MB - 1GB)的文件。当两个或多个作业同时运行时(当任务同时运行时)会出现OutOfMemoryException(OOM)。

为什么会这样?

是否因为所有任务使用的流程相同,在32位架构上限制为2GB,在64位上限制为4GB?

任务是通过线程实现的吗?

我该如何解决这个问题?

我可以使用多进程架构,因此每个子进程可以拥有自己的VM(2GB / 4GB),因此不会轻易发生溢出(因为我没有大于2GB的文件)。但这意味着我必须重构整个应用程序以使用子进程而不是任务。我可以共享数据,例如不同进程中的单例作业队列吗?

所有配置都在Spring.NET中进行

有什么方法可以通过在同一个应用程序中使用任务来解决这个问题吗?

是否可以增加进程的VM?

任何帮助都会有用。

1 个答案:

答案 0 :(得分:-1)

我将通过使用多进程架构重构系统来解决问题。