当前位置: 首页 > 知识库问答 >
问题:

在C#中,多线程比顺序执行花费更多的时间

谈灵均
2023-03-14
while(reader.read())
{
 string Number= (reader["Num"] != DBNull.Value) ? reader["Num"].ToString() : string.Empty;
  threadarray[RowCount] = new Thread(() =>
  {

  object ID= (from r in Datasetds.Tables[0].AsEnumerable()
                                            where r.Field<string>("Num") == Number
                                            select r.Field<int>("ID")).First<int>();


 });

                threadarray[RowCount].Start();
                RowCount++;
}

共有1个答案

闻人高卓
2023-03-14

线程并不总是更快,在许多情况下可能会更慢(比如这里看到的情况)。原因有很多,但最重要的两个是

  • 创建线程是相对昂贵的操作系统操作
  • 上下文切换(CPU停止在一个线程上工作,开始在另一个线程上工作)也是一个相对昂贵的操作

创建200个线程将花费相当多的时间(对于默认堆栈大小,这将为堆栈单独分配200MB内存),并且除非您的机器有200个内核,否则操作系统也需要花费相当多的时间在这些线程之间切换上下文。

 类似资料:
  • 我在学习java stream api时在代码中发现了这个问题。 这是我的代码 我在sts和inteliJ IDE上试用了这段代码,结果都是一样的。并行比顺序需要更长的时间。我的JDK有问题吗?请建议。

  • 本文向大家介绍C#计算程序执行过程花费时间的方法,包括了C#计算程序执行过程花费时间的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#计算程序执行过程花费时间的方法。分享给大家供大家参考。具体如下: 计算执行完程序花费的时间: 希望本文所述对大家的C#程序设计有所帮助。

  • 我目前在Java的编程课上学习多线程。根据我的理解,不同线程的执行顺序是无法预测的,因此确保我们实现机制以确保所有东西都按所需的顺序执行是很重要的。 我学到的机制之一是使用,它强制一个线程等待,直到其他线程完成执行。然而,下面的示例代码实际上让我更加困惑: 这段代码应该演示是如何工作的,它将执行,然后得到一个正确打印的。 然而,当我实际运行代码时,执行的顺序似乎仍然是随机的。我得到的结果是 那么,

  • 问题内容: 我尝试从一本书(Paul Hyde,Java Thread Programming)中运行示例。它说线程的顺序将互换。但是我总是得到:之后打印10个“主线程”,然后打印10个“新线程”。更有趣的是:如果我将使用tt.run而不是tt.start,那么结果将相反。也许这本书太老了,示例基于JDK 1.2的原因???代码如下: 问题答案: JVM决定何时将控制权从主线程转移到第二个线程。由

  • 我搜索了关于测量Java应用程序执行时间的信息,得到了以下代码: 开始和停止之间的差异给了我执行时间。 注意:我知道这不是确切的执行时间。我只是需要多线程和单线程应用程序之间的比较的时间。 如果我这样更改代码会怎样: 执行10个线程。不管他们做什么。假设他们随机填充一个二维数组。 现在,stop-start给了我“全部”执行时间?或者我必须自己测量线程吗?