Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir sorgu paralel olarak yürütülürken PLINQ, birden çok iş parçacığının genellikle ayrı iş parçacıklarında aynı anda farklı parçalar üzerinde çalışabilmesi için kaynak diziyi bölümler. Sonuçlar bir iş parçacığında, örneğin foreach (For Each Visual Basic’te) bir döngüde kullanılacaksa, o zaman her iş parçacığının sonuçları tek bir sırada birleştirilmelidir. PLINQ'un gerçekleştirdiği birleştirme türü, sorguda bulunan işleçlere bağlıdır. Örneğin, sonuçlara yeni bir sıra uygulayan işleçler tüm iş parçacıklarındaki tüm öğeleri arabelleğe almalıdır. İlk sonucunu vermeden önce gözle görülür bir süre çalıştırılabilir olan tam arabelleğe alınmış bir sorgu, tüketen iş parçacığının (aynı zamanda uygulama kullanıcısının) bakış açısından böyle algılanır. Varsayılan olarak diğer işleçler kısmen arabelleğe alınıyor; sonuçları toplu olarak verir. Bir işleç, varsayılan olarak ForAll arabelleğe alınmaz. Tüm iş parçacıklarındaki tüm öğeleri hemen sunar.
Aşağıdaki örnekte gösterildiği gibi yöntemini kullanarak WithMergeOptions PLINQ'a ne tür bir birleştirme gerçekleştirildiğini gösteren bir ipucu sağlayabilirsiniz.
var scanLines = from n in nums.AsParallel()
.WithMergeOptions(ParallelMergeOptions.NotBuffered)
where n % 2 == 0
select ExpensiveFunc(n);
Dim scanlines = From n In nums.AsParallel().WithMergeOptions(ParallelMergeOptions.NotBuffered)
Where n Mod 2 = 0
Select ExpensiveFunc(n)
Örneğin tamamı için bkz . Nasıl yapılır: PLINQ'ta Birleştirme Seçeneklerini Belirtme.
Belirli bir sorgu istenen seçeneği desteklemiyorsa, bu seçenek sadece görmezden gelinir. Çoğu durumda, PLINQ sorgusu için birleştirme seçeneği belirtmeniz gerekmez. Ancak bazı durumlarda, sorguların varsayılan olmayan modda en iyi şekilde yürütüldüğünü test ederek ve ölçerek bulabilirsiniz. Bu seçeneğin yaygın kullanımlarından biri, daha hızlı yanıt veren bir kullanıcı arabirimi sağlamak için öbek birleştirme işlecini sonuçlarını akışa almak için zorlamaktır.
Paralel Birleştirme Seçenekleri
Numaralandırma, ParallelMergeOptions desteklenen sorgu şekilleri için sonuçlar bir iş parçacığında kullanıldığında sorgunun son çıkışının nasıl verileceğini belirten aşağıdaki seçenekleri içerir:
Not BufferedNotBuffered seçeneği, her işlenen öğenin, üretilir üretilmez her iş parçacığından geri döndürülmesini sağlar. Bu davranış, çıkışı "streaming" yapmaya benzetir. AsOrdered İşleç sorguda varsa,
NotBufferedkaynak öğelerin sırasını korur. Kullanılabilir oldukları anda sonuç vermeye başlasaNotBufferedda, tüm sonuçları üretme süresi diğer birleştirme seçeneklerinden birini kullanmaktan daha uzun olabilir.Auto BufferedAutoBuffered seçeneği, sorgunun elemanları bir arabelleğe toplamasını ve ardından arabellek içeriğini belirli aralıklarla tüketen iş parçacığına topluca iletmesine neden olur. Bu,
NotBuffered'ün "akış" davranışını kullanmak yerine, kaynak verileri "öbekler" halinde sunmaya benzer.AutoBuffered, ilk öğeyi tüketen iş parçacığında kullanılabilir yapmak içinNotBuffered'den daha uzun sürebilir. Arabelleğin boyutu ve tam verim davranışı yapılandırılamaz ve sorguyla ilgili çeşitli faktörlere bağlı olarak değişebilir.FullyBufferedBu seçenek, FullyBuffered öğelerden herhangi biri getirilmeden önce sorgunun tamamının çıktısının arabelleğe alınmasına neden olur. Bu seçeneği kullandığınızda, ilk öğenin tüketen iş parçacığında kullanılabilir olması daha uzun sürebilir, ancak tüm sonuçlar diğer seçenekler kullanılarak elde edilenden daha hızlı üretilebilir.
Birleştirme Seçeneklerini Destekleyen Sorgu İşleçleri
Aşağıdaki tabloda, belirtilen kısıtlamalara tabi olarak tüm birleştirme seçeneği modlarını destekleyen işleçler listelenmiştir.
| Operatör | Kısıtlamalar |
|---|---|
| AsEnumerable | Hiç kimse |
| Cast | Hiç kimse |
| Concat | Yalnızca Dizi veya Liste kaynağı olan sıralı olmayan sorgular. |
| DefaultIfEmpty | Hiç kimse |
| OfType | Hiç kimse |
| Reverse | Yalnızca Dizi veya Liste kaynağı olan sıralı olmayan sorgular. |
| Select | Hiç kimse |
| SelectMany | Hiç kimse |
| Skip | Hiç kimse |
| Take | Hiç kimse |
| Where | Hiç kimse |
Diğer tüm PLINQ sorgu işleçleri, kullanıcı tarafından sağlanan birleştirme seçeneklerini yoksayabilir. Bazı sorgu işleçleri, örneğin Reverse ve OrderBy, tümü üretilip yeniden sıralanana kadar herhangi bir öğeyi veremez. Bu nedenle, gibi ParallelMergeOptionsbir işleç de içeren bir sorguda kullanıldığında, Reverse birleştirme davranışı, işleç sonuçlarını oluşturana kadar sorguya uygulanmaz.
Bazı operatörlerin birleştirme seçeneklerini işleme yeteneği, kaynak dizisinin türüne ve AsOrdered operatörünün sorguda daha önce kullanılıp kullanılmadığına bağlıdır. ForAll her zaman NotBuffered'dir; öğelerini hemen verir. OrderBy her zaman FullyBufferedolur; sonuç vermeden önce listenin tamamını sıralamalıdır.