C# 多线程、LINQ和CPU使用
我已从数据库中选择数据并填充我的数据表 我还有10个线程从我的数据表中选择所需的数据 当这些线程同时启动时,cpu使用率将达到100%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")
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没有问题,这就是线程的用途。