MultiThreading和LINQ和CPU使用情况

时间:2013-05-10 08:46:10

标签: 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") == thisCode
                         select x).CopyToDataTable();
    }

我该怎么办?

感谢。

1 个答案:

答案 0 :(得分:2)

  

我使用linq to sql

不,你真的没有。看这里:

void TRD1_Task(DataTable myDataTable, Int64 thisCode)

没有使用LINQ to SQL。那是使用DataTable。这意味着您已经将所有数据提取到您的流程中。别这么做。

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

var query = from user in dbContext.Users
            where user.Code == thisCode
            select user;

可能最初使用LINQ to SQL来获取DataTable的数据,但如果是,那么:

  • 使用DataTable时很奇怪,大概是你有一个非常好的强类型模型
  • 您已经已经获取了所有数据后,过滤了这一事实使得它非常低效 - 您希望在数据库本身中执行过滤。

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