sql >> Databáze >  >> RDS >> Sqlserver

Omezení paměti serveru SQL a .NET, alokace a shromažďování odpadků

Problém je v tom, že z nějakého důvodu není váš DataReader uzavřen. Výjimka? Uživatel metody si nezapomněl zavřít DataReader?

Funkce, která vrací DataReader k použití mimo jeho tělo, ponechává odpovědnost za jeho uzavření do vnějšího kódu, takže neexistuje žádná záruka, že bude Reader uzavřen. Pokud čtečku nezavřete, nemůžete znovu použít připojení, ve kterém byla otevřena.

Takže vracet DataReader z funkce je velmi špatný nápad!

Můžete si prohlédnout celou diskuzi na toto téma zde .

Podívejte se na použití této funkce (GetDataReader ) a zkontrolujte, zda existuje záruka, že se čtečka zavírá. A co je nejdůležitější, neexistuje žádná možnost, že by tento kód znovu vstoupil a použil stejnou kolekci k otevření nového DataReaderu před uzavřením prvního. (Nenechte se zmást příkazem CommandBehavior.CloseConnection. Toto se postará o uzavření připojení pouze při zavřeném DataReaderu... pouze v případě, že jej neuzavřete)



  1. Uživatelem definované proměnné v PostgreSQL

  2. Volání funkce v klauzuli where

  3. Přidejte mod_mysql, mod_xml a mod_zlib do apache

  4. sp_send_dbmail spuštěný z úlohy selže s výsledkem dotazu připojeným jako soubor