在LINQ查詢創建新的獨立的任務時運行LINQ查詢.asparallel,我已經使用.AsParallel如下:增加花費時間在C#
var completeReservationItems = from rBase in reservation.AsParallel()
join rRel in relationship.AsParallel() on rBase.GroupCode equals rRel.SourceGroupCode
join rTarget in reservation.AsParallel() on rRel.TargetCode equals rTarget.GroupCode
where rRel.ProgramCode == programCode && rBase.StartDate <= rTarget.StartDate && rBase.EndDate >= rTarget.EndDate
select new Object
{
//Initialize based on the query
};
然後,我創建了兩個獨立的任務,是運行它們並聯,通過相同的解釋,以兩種方法如下:
Task getS1Status = Task.Factory.StartNew(
() =>
{
RunLinqQuery(params);
});
Task getS2Status = Task.Factory.StartNew(
() =>
{
RunLinqQuery(params);
});
Task.WaitAll(getS1Status, getS2Status);
我被捕獲的定時,驚訝地看到,定時如下:
- 以上情形:6秒(6000毫秒)
- 相同的代碼,依次運行代替2-任務:50毫秒
- 相同的代碼,但是沒有.AsParallel()在LINQ:50毫秒
我想了解爲什麼在上述情況下這麼長時間。
因爲並行並不意味着更快。如果基本操作速度很快,並且執行速度會更慢,因爲線程之間的上下文切換需要太多時間。 – tym32167
@ tym32167同意,但我想知道在這種情況下將以什麼方式創建線程。因爲在我提到的情況2和3中,它仍然是一個並行操作,但速度更快。 –