2012-10-30 4 views
7

Ciągle czytam, że SqlDataReaders są znacznie szybsze niż SqlDataAdapters ze względu na ich połączoną charakterystykę szybkiego przewijania, tylko do odczytu, jednorzędowego w czasie, i że są one szczególnie szybsze niż SqlDataAdapters, kiedy wypełniają obiekt DataTable (SqlDataAdapter.Fill (dataTable)).Jeśli SqlDataAdapter używa wewnętrznie czytnika danych, dlaczego ludzie mówią, że używanie SqlDataReader jest szybsze?

Jednak tu i ówdzie ktoś powie "prawdopodobnie nie zmieni to, czego używasz, ponieważ SqlDataAdapter używa wewnętrznie czytnika danych do wypełnienia swojej tabeli." Jeśli to prawda, jak dokładnie adapter może być wolniejszy, jeśli komunikuje się z bazą danych za pomocą wewnętrznego czytnika danych?

Wiem, że mógłbym ustawić testy i profilować wydajność każdego z nich, ale chciałbym, aby ktoś rzucił nieco światła na rzekome rozbieżności w wydajności, jeśli zasadniczo zajmujemy się tym samym procesem. droga.

Rozumiem, że zwykle korzystasz z czytnika, aby utworzyć listę silnie typowanych POCO, w przeciwieństwie do adaptera danych, który po prostu wypełnia tabelę. Jednak moje pytanie dotyczy wyłącznie szczegółów różnicy wydajności między tymi dwoma, a nie obawami O/RM ...

Odpowiedz

5

Jeśli używasz DataReadera, możesz reagować na niektóre informacje podczas czytania pierwszego wiersza, a nawet lekceważyć reszta czytania.

Jeśli korzystasz z DataAdapter, musisz najpierw załadować całą tabelę i , a następnie odczytać pierwszy wiersz, aby zareagować na te same informacje.

+0

Należycie zauważyć, ale co, jeśli nie muszę sprawdzać każdego wiersza pod kątem jakiegoś warunku? Innymi słowy, co jeśli interesuje mnie tylko pobranie całego podzbioru rekordów, na przykład zapełnianie GridView? – bglee

+1

@bglee Będziesz musiał zlokalizować źródło, dlaczego uważasz, że obiekt DataReader jest szybszy od elementu DataAdapter * we wszystkich okolicznościach *. Są to po prostu różne narzędzia dostępu do danych. DataAdapters są cięższymi obiektami, ponieważ dzięki nim można znacznie więcej danych, na przykład aktualizować, usuwać itp. – LarsTech

Powiązane problemy