Koduję w .NET odkąd wyszedł z wersji beta. To dużo czasu i powinienem ponownie przeanalizować niektóre z moich założeń, aby zobaczyć, czy coś się zmieniło.

Jednym z moich największych założeń jest to, że czytnik danych jest szybszy niż zbiór danych — http://www.sitepoint.com/ dataset-datareader/

Czy nadal tak jest? Czy coś się zmieniło? Słyszałem plotki, że jest teraz coś mniej „gadatliwego” niż czytniki danych, ale nie mogę znaleźć żadnych artykułów, aby to zrobić. Pomysł polegał na tym, że kiedy „readnext” muszę wykonać podróż w obie strony bazy danych, podczas gdy alternatywa pobiera wszystko na raz w jednej podróży.

Czy istnieje teraz szybsza alternatywa dla czytnika danych, czy powyższy artykuł jest nadal poprawny?

Dla przypomnienia, kiedy mam czytnik danych, wszystko, co robię, to umieszczam wartości wierszy w obiekcie, umieszczam obiekt w tablicy mieszającej, czytam następny wiersz, powtarzam, a następnie zamykam połączenie. Dowolną logikę łączącą obiekty można wykonać za pomocą tablic haszujących po zamknięciu połączeń (zwolnienie puli tak szybko, jak to możliwe).

4
JSWork 22 lipiec 2011, 01:30
2
"roomers" powinno być pisane "plotki"
 – 
LarsTech
22 lipiec 2011, 02:12
Dziękuję! Naprawiony.
 – 
JSWork
22 lipiec 2011, 17:38

3 odpowiedzi

Najlepsza odpowiedź

Podstawowa logika wypełniania DataSet przez obiekt DbDataAdapter nie uległa zmianie. Nadal używa DbDataReader do wypełnienia DataSet. Tak więc, z definicji, użycie DataReadera do operacji, którą opisujesz, będzie nadal wydajniejsze.

1
Mark Wilkins 22 lipiec 2011, 01:40
Dziękuję. Wygląda na to, że pokoje były właśnie - pokojami.
 – 
JSWork
22 lipiec 2011, 01:48
1
@JSWork: Obecnie jest zdecydowanie więcej metod do przechwytywania danych (rzeczy związane z frameworkiem encji, Linq itp.). Większość z nich zapewnia więcej warstw abstrakcji. Do odczytywania danych bezpośrednio z serwera bazy danych, DataReader jest dość cienki. Jest to oczywiście zależne od dostawcy, ale podstawowa logika polega na wykonaniu instrukcji SQL, a następnie odczytaniu wierszy danych z powrotem bez żadnych innych działań. A ponieważ są one przeznaczone tylko do przesyłania dalej, umożliwiają dostawcom korzystanie z pamięci podręcznej z wyprzedzeniem. Nie znam szybszych sposobów (w .NET) na takie odczytywanie danych, ale też nie mówię, że nie istnieją.
 – 
Mark Wilkins
22 lipiec 2011, 01:57

DataReaders i DataSets mają różne zestawy funkcji. Nie ma znaczenia, jak szybki może być DataReader, jeśli nie ma funkcji, których potrzebujesz z DataSet. Porównujesz jabłka i pomarańcze.

Jeśli chcesz jabłka, użyj jabłka, jeśli chcesz pomarańczy, użyj tego. Użyj najlepszego narzędzia do pracy.

2
Erik Funkenbusch 22 lipiec 2011, 01:34
Moim głównym zmartwieniem jest prędkość. Używam czytników danych, ponieważ nie potrzebuję funkcjonalności zestawu danych. Martwiłem się, że coś mogło się zmienić w ciągu ostatnich 8 lat i coś szybszego niż czytniki danych mogło sprawić, że czytniki danych stały się przestarzałe.
 – 
JSWork
22 lipiec 2011, 01:47
- Chodzi o to, że DataSets nie są wolniejsze niż DataReadery, ponieważ DataReaders nie mogą robić tego, co DataSets. To inna funkcja. Jeśli potrzebujesz DataReadera, użyj DataReadera, ponieważ jest to odpowiednia klasa do użycia, a nie dlatego, że jest szybszy niż coś, co nie jest DataReaderem. Jeśli czytniki danych są tym, czego potrzebujesz, używaj ich dalej.
 – 
Erik Funkenbusch
22 lipiec 2011, 01:53
Kiedy szybkość jest moim głównym zmartwieniem, czy mógłbyś podać sytuację, w której użycie czytnika danych zamiast zestawu danych byłoby niewłaściwe? Nigdy wcześniej nie byłem w sytuacji, która wymagała ode mnie używania zestawu danych zamiast czytnika danych. Jeśli robię to niepoprawnie z moim dogmatycznym podejściem, chciałbym wiedzieć.
 – 
JSWork
22 lipiec 2011, 17:40
Częścią mojego zamieszania jest artykuł stwierdzający, że zbiory danych wykorzystują czytniki danych do zapełniania się. Jeśli tak jest, dlaczego zbiory danych nie są wolniejsze?
 – 
JSWork
22 lipiec 2011, 17:46

Tak, DataSets są nadal strasznie wolne, więc nigdy nie powinieneś ich używać w żadnym systemie, który ma więcej niż 1 użytkownika lub jest aplikacją internetową.

1
Biff MaGriff 22 lipiec 2011, 01:34