【发布时间】:2025-12-17 21:15:02
【问题描述】:
我开发了一个多线程应用程序,它在循环中启动线程。
我是否需要担心线程的关闭/终止,否则它会自动关闭。
我每秒钟都在创建新线程,并且它正在连续运行,如下所示。
Run() 方法正在由 Windows 服务调用。
public void Run(int count)
{
for(i=count i<count ;i++)
{
ThreadTest t=new ThreadTest();
Thread newThread = new Thread(t.DoWork);
newThread.Start();
}
}
Class ThreadTest
{
Public void DoWork()
{
// do some calculation and update database fields.
}
}
【问题讨论】:
-
只是一个评论:像这样启动线程通常是一个坏主意,因为您要为每个新线程支付大量开销。如果可能的话,使用线程池来分摊线程管理的成本。
-
我推荐使用线程池。正如布赖恩所提到的,手动线程有相当大的开销。包括每次分配的 1MB 堆栈。线程池将汇集未使用的线程并重用它们,而无需在您需要新线程时重新分配它们。
-
@BradleyUffner 但要在线程池线程上运行我需要使用 ThreadPool.QueueUserWorkItem 并且它不会立即启动线程可能有 1/2 秒的延迟。我需要尽快启动线程。
-
@BrianRasmussen 一旦线程完成方法/作业,它是不是取消分配使用的内存。
-
@FatalError 正如其他人所说,分配
Thread会产生大量开销,最终可能会耗尽系统资源。Thread类不保证线程的创建和执行时间,这对你来说意味着什么?
标签: c# multithreading windows-services