C# 如何有条件地使用 AsParallel 或在运行时动态附加
C# How to use AsParallel conditionally or attach dynamically at runtime
这是一个通过 LINQ 在两个数据表之间进行连接的示例
var JoinResult = (from p in dt.AsEnumerable()
join t in dtTax.AsEnumerable()
on p.Field<int>("Tax Id") equals t.Field<int>("Tax Id")
select new
{
ProductName = p.Field<string>("Product Name"),
BrandName = p.Field<string>("Brand Name"),
ProductCategory = t.Field<string>("Product Category"),
TaxCharge = t.Field<int>("Charge")
}).ToList();
有时两个数据表中的数据量很大,有时两个数据表中的数据量很小。当数据量较小时 AsParallel() 不需要,因为我知道 AsParallel() 会在 运行 时减速数据,但是当数据量很大时,AsParallel() 工作得很好而且很快。
请告诉我如何动态使用 AsParallel() 作为结果,当数据量很大且方式相同时 AsParallel() 数据量小的时候不会应用。
How to build dynamic query with expression tree for PLINQ
我找不到适合我的方案的好解决方案,可以动态地将 AsParallel() 附加到我的 linq 查询。请分享知识以实现我的目标。谢谢
老实说,我认为这不可能。 LINQ 和 PLINQ 有不同的运算符。 LINQ 运算符对 IEnumerable<T>
s 进行操作,而 PLINQ 运算符对 ParallelQuery<T>
s 进行操作。因此,尽管查询的两个版本(有和没有 AsParallel
)看起来完全相同,但它们从根本上说是两个完全不同的查询。
就做两个执行分支,其中一个使用AsParallel()
.
if (hugeAmountOfData)
{
result = (
...
query.AsParallel()
...
).ToList();
}
else
{
result = (
...
query
...
).ToList();
}
这是一个通过 LINQ 在两个数据表之间进行连接的示例
var JoinResult = (from p in dt.AsEnumerable()
join t in dtTax.AsEnumerable()
on p.Field<int>("Tax Id") equals t.Field<int>("Tax Id")
select new
{
ProductName = p.Field<string>("Product Name"),
BrandName = p.Field<string>("Brand Name"),
ProductCategory = t.Field<string>("Product Category"),
TaxCharge = t.Field<int>("Charge")
}).ToList();
有时两个数据表中的数据量很大,有时两个数据表中的数据量很小。当数据量较小时 AsParallel() 不需要,因为我知道 AsParallel() 会在 运行 时减速数据,但是当数据量很大时,AsParallel() 工作得很好而且很快。
请告诉我如何动态使用 AsParallel() 作为结果,当数据量很大且方式相同时 AsParallel() 数据量小的时候不会应用。
How to build dynamic query with expression tree for PLINQ
我找不到适合我的方案的好解决方案,可以动态地将 AsParallel() 附加到我的 linq 查询。请分享知识以实现我的目标。谢谢
老实说,我认为这不可能。 LINQ 和 PLINQ 有不同的运算符。 LINQ 运算符对 IEnumerable<T>
s 进行操作,而 PLINQ 运算符对 ParallelQuery<T>
s 进行操作。因此,尽管查询的两个版本(有和没有 AsParallel
)看起来完全相同,但它们从根本上说是两个完全不同的查询。
就做两个执行分支,其中一个使用AsParallel()
.
if (hugeAmountOfData)
{
result = (
...
query.AsParallel()
...
).ToList();
}
else
{
result = (
...
query
...
).ToList();
}