【问题标题】:Closure of thread c#.net线程c#.net的关闭
【发布时间】: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


【解决方案1】:

当您指定的函数返回时,线程终止。如果您设法创建线程比完成线程快,您将累积运行线程并最终耗尽系统资源。真的有必要拥有无限数量的线程吗?

【讨论】: