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

C# 如何克服在使用多个任务时内存不足的情况,c#,multithreading,service,out-of-memory,task,C#,Multithreading,Service,Out Of Memory,Task,我有一个C语言的应用程序,可以作为Windows服务或控制台应用程序运行 此应用程序维护作业的单例队列(不包括对它的任何访问),并且在任何时候,通过使用任务(从.NET)只能同时运行N个最大作业。应用程序的主线程不会等待任务完成 计时器在一段时间间隔后重复触发,并尝试处理新作业。作业加载和处理大文件大小(500MB-1GB)的文件。当两个或多个作业同时运行时(当任务同时运行时),将出现OutOfMemoryException(OOM) 为什么会发生这种情况 是因为所有任务都使用相同的进程虚拟机,

我有一个C语言的应用程序,可以作为Windows服务或控制台应用程序运行

此应用程序维护作业的单例队列(不包括对它的任何访问),并且在任何时候,通过使用任务(从.NET)只能同时运行N个最大作业。应用程序的主线程不会等待任务完成

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

为什么会发生这种情况

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

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

我怎样才能解决这个问题

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

所有配置都是通过Spring.NET进行的

通过在同一个应用程序中使用任务,有没有办法解决这个问题

是否可以增加进程的VM


任何帮助都会很有用。

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

您是否将整个文件读入内存?如果是这样的话,请考虑更改它,因为在很多情况下,这完全是内存浪费,流式方法也可以工作。我们使用XML文件并使用FixEngor和XmlReader加载xDoop.Load()文件。我们分析数据,因此有必要加载所有数据。这会创建一个完整的DOM树,它比文件消耗更多的内存。如果您实际上不需要该树,那么使用XmlReader会更好。当您说流式方法时,您能给我一个例子吗?这适用于文件的正常读取,即不使用File.ReadAllText,而是使用FileStream来读取部分文件。对于XML文件,XML读取器提供“对XML数据的快速、非缓存、仅前向访问”