为SQL Server填充的多个下拉框创建线程或并行编程

本文关键字:创建 线程 编程 并行 Server SQL 填充 | 更新日期: 2023-09-27 18:28:41

所以我有一个带有扩展方法的poco类,它填充了一个选择列表,如下所示。假设我有10个下拉框,每个扩展方法都进入数据库并填充SelectList。现在我想把每个方法都作为一个线程来启动,这是个好主意吗。。。。我正在寻求能更好地提高性能和速度的建议和事情。线程是否比sql连接更昂贵?我应该每个线程运行两个进程吗,三个、四个。。。?

class person
{
  public person()
  { 
   CrimesListbox1      = CrimesListBox1.populate();
   CrimesListBox2      = CrimesListBox1.populate();
   CrimesListBox3      = CrimesListBox1.populate();
    //so instead of the above way should i..... do the following? 

   Thread t = new Thread (this.CrimesListBox1.populate());          // Kick off a new thread
   t.Start();
   Thread t2 = new Thread (this.CrimesListBox2.populate());   
   t2.Start();
  }
    public SelectList CrimesListBox1{get;set}
    public SelectList CrimesListBox2{get;set}

    public static SelectList populate(this SelectList Object)
        {
                CrimesDataContext LinqCtx = new CrimesDataContext ();
                var CrimesListBox1=
                       (
                        from x in LinqCtx.CrimesListBox1
                        orderby x.Crimes
                        select x
                       );
                Object= 
                        new SelectList
                        (
                            CrimesListBox1, "CrimeId", "CrimeName"
                        );
                return Object;
            }
}//end of the person class

为SQL Server填充的多个下拉框创建线程或并行编程

现在我想把每个方法都作为一个线程来启动,这是个好主意吗。。。。

没有。这是一个以"S"开头,以"D"结尾,有4个字母的想法。

线程有开销。让我们进入要点:

  • 使用任何形式的异步编程都可能没有什么意义——因为框很长,所以不会导致潜在的差异
  • 不过,如果是这样的话,可能会有好处。但是,使用单独的线程几乎不了解.NET框架

解决方案:

  • 对于当前的.NET,请使用TASKS。Tasks框架就是这样做的
  • 对于.NET 4.5,请使用异步方法

这些线程在内部使用一个线程池,所以它们不会为每个小请求打开另一个线程,而是在被分配这些小任务时保留一个工作线程池。因为创建和销毁线程有一个不平凡的开销。ThreadPool(.net 4.0之前的解决方案)、任务框架和下一个版本中的异步方法都非常适合不必处理这些项目。任务已经足够好了,现在可以使用了。

为此目的使用线程是个坏主意。考虑一下这个经验法则。在竞争同一资源时不要使用线程。资源可以是磁盘、数据库、屏幕、用户界面。使用线程时,数据库不会变快,因为在同一资源上的工作量是相同的。

就像在单核上计算cpu繁重的计算一样,使用线程分割工作不会更快。就像从一个磁盘上读取多个文件一样,用线程分割工作不会更快。

这些示例使用单一的资源,cpu和磁盘,它们以最快的速度工作。

当您想要组合两种资源时,线程处理非常有用。在执行cpu计算时从磁盘读取,线程处理可以为计算等预取数据带来好处。

如果使用.Net 4.0或更高版本,则可以使用Parallel Linq(PLinq)。