-3

我已经从数据库中选择了数据并填写了我的数据表。

此外,我有 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();
    }

我该怎么办?

谢谢。

4

1 回答 1

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 问题只是您一开始就不应该在进程中拥有所有这些数据这一事实的副作用。

于 2013-05-10T08:49:28.100 回答