【发布时间】:2023-04-06 09:15:01
【问题描述】:
我们正在设计一个应用程序,用户可以在其中设置同时运行的多个任务。我们使用 ThreadPool.QueueUserWorkItem 来设置任务运行。那部分运行良好。
我们确实有一个问题,这些任务可能会消耗 500MB 以上的内存。我们使用内存映射 I/O 来管理内存。仍然当用户设置 10+ 个任务同时运行时,线程池将启动所有这些任务,并且有时我们会耗尽内存并发生异常。我们可以很好地处理错误。
我想知道是否有办法在处理队列时考虑将消耗的内存,即保持任务排队直到存在足够的内存?我可以告诉线程池我们将要求多少内存(我们可以粗略估计)吗?
【问题讨论】:
-
听起来根本不像适当地使用线程池。 TP 线程应该只执行短时间的小部分工作,不超过半秒。使用有限数量的 Thread 对象,不超过 Environment.ProcessorCount 和一个线程安全队列来让它们工作。
-
谢谢,我想我们会用这种方法编写自己的池。
标签: .net multithreading memory threadpool queueuserworkitem