Procedure: Opties voor samenvoegen opgeven in PLINQ
In dit voorbeeld ziet u hoe u de samenvoegopties opgeeft die van toepassing zijn op alle volgende operators in een PLINQ-query. U hoeft geen samenvoegopties expliciet in te stellen, maar dit kan de prestaties verbeteren. Zie Opties voor samenvoegen in PLINQ voor meer informatie over samenvoegopties.
Waarschuwing
Dit voorbeeld is bedoeld om het gebruik te demonstreren en kan mogelijk niet sneller worden uitgevoerd dan de equivalente opeenvolgende LINQ naar objectenquery. Zie Inzicht in snelheid in PLINQ voor meer informatie over versnelling.
Opmerking
In het volgende voorbeeld ziet u het gedrag van samenvoegopties in een basisscenario met een niet-geordende bron en wordt een dure functie toegepast op elk element.
namespace MergeOptions
{
using System;
using System.Diagnostics;
using System.Linq;
using System.Threading;
class Program
{
static void Main(string[] args)
{
var nums = Enumerable.Range(1, 10000);
// Replace NotBuffered with AutoBuffered
// or FullyBuffered to compare behavior.
var scanLines = from n in nums.AsParallel()
.WithMergeOptions(ParallelMergeOptions.NotBuffered)
where n % 2 == 0
select ExpensiveFunc(n);
Stopwatch sw = Stopwatch.StartNew();
foreach (var line in scanLines)
{
Console.WriteLine(line);
}
Console.WriteLine("Elapsed time: {0} ms. Press any key to exit.",
sw.ElapsedMilliseconds);
Console.ReadKey();
}
// A function that demonstrates what a fly
// sees when it watches television :-)
static string ExpensiveFunc(int i)
{
Thread.SpinWait(2000000);
return string.Format("{0} *****************************************", i);
}
}
}
Class MergeOptions2
Sub DoMergeOptions()
Dim nums = Enumerable.Range(1, 10000)
' Replace NotBuffered with AutoBuffered
' or FullyBuffered to compare behavior.
Dim scanLines = From n In nums.AsParallel().WithMergeOptions(ParallelMergeOptions.NotBuffered)
Where n Mod 2 = 0
Select ExpensiveFunc(n)
Dim sw = Stopwatch.StartNew()
For Each line In scanLines
Console.WriteLine(line)
Next
Console.WriteLine("Elapsed time: {0} ms. Press any key to exit.")
Console.ReadKey()
End Sub
' A function that demonstrates what a fly
' sees when it watches television :-)
Function ExpensiveFunc(ByVal i As Integer) As String
Threading.Thread.SpinWait(2000000)
Return String.Format("{0} *****************************************", i)
End Function
End Class
In gevallen waarin de AutoBuffered optie een ongewenste latentie voordat het eerste element wordt geretourneerd, probeert u de NotBuffered optie om resultaatelementen sneller en soepeler te genereren.