如何在使用多个任务时克服内存不足的情况

本文关键字:克服 内存不足 情况 任务 | 更新日期: 2023-09-27 18:25:28

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

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

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

为什么会发生这种情况?

是因为所有任务都使用相同的进程虚拟机吗?32位架构上的虚拟机限制为2GB,64位架构上限制为4GB?

任务是用线程实现的,对吗?

我该如何解决这个问题?

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

所有配置都发生在Spring上。净

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

是否可以增加进程的VM?

任何帮助都是有用的。

如何在使用多个任务时克服内存不足的情况

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