Mój problem polega na tym, że NHibernate staje się wykładniczo wolny podczas pobierania rekordów z bazy danych. Miałem wniosek, aby zasadniczo wyciągnąć wszystkie dane z bardzo dużej bazy danych do wykorzystania w raporcie.Wybór NHibernate rośnie wykładniczo powoli
Pomyślałem, że skoro nie mogę uzyskać wszystkich rekordów w jednym ujęciu, ponieważ zestaw rekordów jest tak duży, pomyślałem, że spróbuję go zepsuć. Zasadniczo I itating przez zakresy indeksu, tj. zapisuje id x do y, następnie y + 1 do z, i tak dalej.
Każdy zestaw wyników wynosi około 10megs. Pierwsze 20 lub mniej ciągnięć zajmuje mniej niż minutę, a po następnym pociągnięciu zajmuje to 10 minut, potem 30 minut i 1 godzinę. Zatrzymałem tam program, nie chciałem czekać, aż nadejdzie następne pociągnięcie. Uruchomiłem program ponownie, zaczynając od indeksu, w którym przerwałam, ponownie, pierwsze 20 lub tak ciągnie są naprawdę szybkie, a następnie z jakiegoś dziwnego powodu następuje poważne spowolnienie.
Każda pomoc zostanie bardzo doceniona.
Zgadzam się - sesja NHibernate staje się wolniejsza i wolniejsza, ponieważ pamięć podręczna pierwszego poziomu rośnie i rośnie. Innym sposobem rozwiązania tej sytuacji jest użycie "bezpaństwowej" sesji NHibernate, która w ogóle nie korzysta z pamięci podręcznej. Jest idealny do robienia operacji masowego przesyłania danych w ten sposób. –
Tak, sesja nie jest przeznaczona do przechowywania tak wielu elementów. Doświadczyłem również tego rodzaju poważnego spowolnienia. Zgadzam się z Danielem na temat wykorzystania sesji bezpaństwowej w tym przypadku. –
Dziękuję całej grupie, jesteście ratownicy życia. Użyłem sesji bezstanowej i teraz każde pociągnięcie zajmuje tyle samo czasu. – Bernard