Czym jest zapytanie równoległe?
Wiele aspektów zapytania PLINQ jest podobnych do nierównoległych zapytań LINQ do obiektów. Podobnie jak sekwencyjne zapytania LINQ, zapytania PLINQ wykonują operacje na dowolnym źródle danych IEnumerable lub IEnumerable w pamięci<T> i odkładają wykonanie, tzn. nie zaczynają się wykonywać po wyliczeniu zapytania. Główna różnica polega na tym, że PLINQ stara się maksymalnie wykorzystać wszystkie procesory na Twoim systemie. Metoda polega na podziału źródła danych na fragmenty, a następnie wykonywaniu równoległych zapytań na wielu procesorach dla każdego fragmentu w osobnym wątku roboczym. W wielu przypadkach wykonywanie równoległe oznacza, że zapytania działają znacznie szybciej.
Dzięki wykonywaniu równoległemu PLINQ może znacząco poprawić wydajność (w porównaniu do starszego kodu dla niektórych typów zapytań), często poprzez dodanie operacji zapytań AsParallel do źródła danych. Jednak równoległość może wprowadzać własną złożoność, dlatego nie wszystkie operacje zapytań w PLINQ działają szybciej. W rzeczywistości równoległość faktycznie spowalnia niektóre zapytania. Dlatego ważne jest, aby zrozumieć, jak takie kwestie jak sortowanie wpłyną na zapytania równoległe. Więcej informacji można znaleźć w artykule Zrozumienie przyspieszenia w PLINQ.
Prosty przykład
Dla 10 000 danych w kolekcji kod jest następujący:
Inne funkcje używane przez PLINQ
1. Korzystając z AsSequential, jeśli nie chcesz używać zapytań równoległych w procesie, możesz użyć tej funkcji do przywrócenia zapytań sekwencyjnych.
2. Przy użyciu AsOrdered, ponieważ PLINQ działa równolegle, wyniki mogą nie być w kolejności, co można zapytać, dodając metodę AsOrderd.
3. Użyj WithDegreeOfParallelism, ta właściwość pozwala ustawić liczbę CUP równolegle na komputerze.
Notatka do sceny
W wielu przypadkach zapytania można równolegle zorganizować, ale narzut związany z konfiguracją zapytań równoległych może przewyższyć korzyści wydajnościowe.Jeśli zapytanie nie wykonuje dużej liczby obliczeń lub jeśli źródło danych jest małe, zapytanie PLINQ może być wolniejsze niż sekwencyjne zapytanie LINQ do obiektów。 Możesz użyć Parallel Performance Analyzer w Visual Studio Team Server, aby porównać wydajność różnych zapytań, znaleźć wąskie gardła w przetwarzaniu i określić, czy zapytania działają równolegle czy sekwencyjnie.
Odniesienie:Logowanie do linku jest widoczne.
|