Spojrzałem na źródło .NET Core, aby dowiedzieć się, czy połączenia z IEnumerable.Last()
(LINQ) są zoptymalizowane, gdy kolekcja implementuje IList
, co do której podejrzewałem, że jest po krótkiej analizie porównawczej. It turns out that yes, the input is specifically checked for IList
, jednak jeszcze przed tym jest sprawdzane, czy dane wejściowe implementuje IPartition
. IPartition
is defined here, ale w ogóle nie rozumiem, co ma robić.Co robi IPartition w .NET Core?
Jaki jest cel IPartition
i jak mogłaby ona być szybciej niż zwykle stałą czasu indeksowania IList
(lub jeśli nie, to dlaczego jest wejście sprawdzone IPartition
wcześniej niż IList
)?
Wygląda na to, że jest używany przez metody takie jak 'Take', aby utworzyć podzbiór danych. Należy pamiętać, że wiele metod linq można wywołać przed pełnym załadowaniem danych podczas używania 'IQueryable' i podobnych. Sprawdzenie 'IPartition' może pozwolić na pewne podstępne optymalizacje. –