[C#] adapter.fill

0

Witam.
Piszę program komunikujący się z dużą bazą danych ( tabela okolo 2,5 mln rekordów).

OleDbCommand command = new OleDbCommand(query, connection);
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
adapter.Fill(data,curr,page, "TABELA");

NIESTETY, sprawdziły się moje obawy. Przy adapter.fill program STRAAAAAAAAAAASZNIE się zamula. Oczywiście nie pobieram wszystkich 2,5 mln rekordów, wychodzi okolo 150. Jednak zapytanie "miele" całą bazę, tak sądzę, że stąd takie spowolnienie.

Proszę o jakieś rady, jak to zrobić, żeby szybciej to zadziałałó. Podobny program w php chodzi znacznie szybciej. Dlaczego ? Zapytanie jest odentyczne, a przynajmniej bardzo zbliżone, czy php na jakies lepsze mechanizmy do komunikacji z accessem (sql`em) ??

0

A to nie jest tak, że do samego odczytu lepiej stosować DataReader?

0

Sprawdz czas zapytania profilerem w sql management studio. Moze tam jest problem. Jesli danych jest sporo, a aplikacja nie jest intranetowa to warto zaimplementowac jakis mechanizm page'ujacy i pobieranie danych tylko dla konkretnej strony. Samo wczytaniet 150 rekordow nie powinno byc problemem, bardziej bym stawial na zapytanie lub wlasnie przesyl danych z bazy do aplikacji :)

0

150 rekordów dla DataAdapter.Fill to jest mgnienie oka więc nie tu problem leży.

0
adf88 napisał(a)

150 rekordów dla DataAdapter.Fill to jest mgnienie oka więc nie tu problem leży.

no tak, ale moj program musi z 2,5 miliona rekordów wybrać te 150, które spełniają kryteria

0
  1. Użyj SqlDataReader lepiej
  2. Sprawdź czy masz założony index na pole, po którym filtrujesz
0
decek_1984 napisał(a)
adf88 napisał(a)

150 rekordów dla DataAdapter.Fill to jest mgnienie oka więc nie tu problem leży.

no tak, ale moj program musi z 2,5 miliona rekordów wybrać te 150, które spełniają kryteria
Ale to nie DataAdapter je wybiera tylko sterownik bazy więc użycie DataReader na prawdę nic tu nie pomoże.

W pewnym programie robiłem select'a wszystkich rekordów z tabeli (100 000) które trwało jakieś 2 sekundy, między Fill a DataReader była różnica 0.2 s. Tak więc prosto można oszacować jaka różnica będzie przy 150 rekordach ;) .

1 użytkowników online, w tym zalogowanych: 0, gości: 1