Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多线程、LINQ和CPU使用_C#_Multithreading_Visual Studio 2010_Linq - Fatal编程技术网

C# 多线程、LINQ和CPU使用

C# 多线程、LINQ和CPU使用,c#,multithreading,visual-studio-2010,linq,C#,Multithreading,Visual Studio 2010,Linq,我已从数据库中选择数据并填充我的数据表 我还有10个线程从我的数据表中选择所需的数据 当这些线程同时启动时,cpu使用率将达到100% void TRD1_Task(DataTable myDataTable, Int64 thisCode) { DataTable dt1 = (from x in myDataTable.AsEnumerable() where x.Field<Int64>("Code")

我已从数据库中选择数据并填充我的数据表

我还有10个线程从我的数据表中选择所需的数据

当这些线程同时启动时,cpu使用率将达到100%

void TRD1_Task(DataTable myDataTable, Int64 thisCode)
    {
        DataTable dt1 = (from x in myDataTable.AsEnumerable()
                         where x.Field<Int64>("Code") == thisCode
                         select x).CopyToDataTable();
    }
void TRD1\u任务(DataTable myDataTable,Int64 thisCode)
{
DataTable dt1=(从myDataTable.AsEnumerable()中的x开始)
其中x.Field(“代码”)==此代码
选择x).CopyToDataTable();
}
我该怎么办

谢谢

我正在使用LINQtoSQL

不,你真的不是。看这里:

void TRD1_Task(DataTable myDataTable, Int64 thisCode)
这不是使用LINQtoSQL。这使用的是一个
数据表
。这意味着您已经将所有数据提取到流程中。不要那样做

如果您使用的是LINQ to SQL,您的查询将类似于:

var query = from user in dbContext.Users
            where user.Code == thisCode
            select user;
您可能最初使用LINQ to SQL为
数据表
获取数据,但如果是这样的话:

  • 使用
    DataTable
    是一件很奇怪的事情,假设您有一个非常好的强类型模型
  • 在获取了所有数据之后进行过滤的事实使其效率极低—您希望在数据库本身中执行过滤

CPU问题只是一个副作用,因为您首先不应该在进程中包含所有这些数据。

尝试使用
ThreadPool
类而不是
Thread
类。我该怎么办?-从问一个实际的问题开始。100%的CPU没有问题,这就是线程的用途。