Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server i .NET ograniczenia pamięci, alokacje i wyrzucanie elementów bezużytecznych

Problem polega na tym, że z jakiegoś powodu Twój DataReader nie jest zamykany. Wyjątek? Użytkownik metody nie pamiętał o zamknięciu DataReadera?

Funkcja, która zwraca obiekt DataReader do użycia poza jego treścią, pozostawia odpowiedzialność za zamknięcie go w kodzie zewnętrznym, więc nie ma gwarancji, że czytnik zostanie zamknięty. Jeśli nie zamkniesz czytnika, nie możesz ponownie użyć połączenia, w którym został otwarty.

Więc zwracanie DataReader z funkcji to bardzo zły pomysł!

Możesz zobaczyć całą dyskusję na ten temat tutaj .

Poszukaj zastosowań tej funkcji (GetDataReader ) i sprawdź, czy jest gwarancja, że ​​czytnik się zamyka. A co najważniejsze, nie ma możliwości ponownego wprowadzenia tego kodu i użycia tej samej kolekcji do otwarcia nowego DataReadera przed zamknięciem pierwszego. (Nie daj się zwieść CommandBehavior.CloseConnection. To zajmuje się zamknięciem połączenia tylko wtedy, gdy DataReader jest zamknięty... tylko wtedy, gdy nie omieszkasz go zamknąć)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak samodzielnie dołączyć do tabeli w taki sposób, aby każdy rekord był połączony z poprzednim rekordem?

  2. Wiersz SQL rozdzielany przecinkami z klauzulą ​​Group By

  3. Błąd sp_cursor SQL INSERT

  4. Wspólne wyrażenie tabeli, dlaczego średnik?

  5. Zamień kolumnę tożsamości z int na bigint