gpt4 book ai didi

c# - TaskFactory.StartNew -> System.OutOfMemoryException

转载 作者:太空狗 更新时间:2023-10-29 23:59:15 27 4
gpt4 key购买 nike

大约有 1000 个任务在运行,但有时我会收到任务调度程序抛出的以下内存不足异常。可能是什么原因以及如何避免。

System.Threading.Tasks.TaskSchedulerException: An exception was thrown by a TaskScheduler. ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.Threading.Thread.StartInternal(IPrincipal principal, StackCrawlMark& stackMark)
at System.Threading.Thread.Start(StackCrawlMark& stackMark)
at System.Threading.Thread.Start(Object parameter)
at System.Threading.Tasks.ThreadPoolTaskScheduler.QueueTask(Task task)
at System.Threading.Tasks.Task.ScheduleAndStart(Boolean needsProtection)
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ScheduleAndStart(Boolean needsProtection)
at System.Threading.Tasks.Task.InternalStartNew(Task creatingTask, Object action, Object state, CancellationToken cancellationToken, TaskScheduler scheduler, TaskCreationOptions options, InternalTaskOptions internalOptions, StackCrawlMark& stackMark)
at System.Threading.Tasks.TaskFactory.StartNew(Action action, CancellationToken cancellationToken, TaskCreationOptions creationOptions, TaskScheduler scheduler)
at App.StartReadSocketTask()

最佳答案

您的(非 x64)应用程序的最大内存空间为 2GB。每个线程至少需要 1 MB,通常您可以在达到 1000 个线程之前预期 OOM。

Task 类本身应该解决这个问题(通过使用 ThreadPool)。但是当您的任务花费的时间太长(> 500 毫秒)时,TP 将缓慢添加线程,并在几分钟或更长时间后失败。

最简单的解决方案可能是查看您的代码中发生这种无限创建任务的地方,看看您是否可以以与您的解决方案一致的方式进行限制。就像您使用的是生产者/消费者队列一样,将其设为有界队列。

否则,限制 MaxThreads,但这是一个钝的、应用程序范围的工具。

关于c# - TaskFactory.StartNew -> System.OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271463/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com