レガシー コードでは、SqlDataReader の閉鎖と破棄の管理は議論の多い問題です。通常、接続は閉じられていますが、リーダーを手動で処理する必要性は依然として不確実です。この記事では、SqlDataReader の破棄を無視した場合のパフォーマンスへの影響を調査し、効率的な処理戦略を提供します。
リーダーの終了と破棄を無視する次のような行為は避けてください。
using SqlConnection connection = new SqlConnection("connection string"); connection.Open(); using SqlCommand cmd = new SqlCommand("SELECT * FROM SomeTable", connection); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("Write results."); } } // reader closure and disposal occur here connection.Close(); // connection closure
このアプローチでは、開発者がリーダーの閉鎖と破棄を手動で処理する必要があります。
確実に適切に破棄するには、using ステートメントを使用します。
using SqlConnection connection = new SqlConnection("connection string"); using SqlCommand cmd = new SqlCommand("SELECT * FROM SomeTable", connection); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("Write results."); } } // reader closure and disposal occur here on line 9 connection.Close(); // connection closure
using ステートメントにより、リーダーが範囲外になったときにリーダーが自動的に破棄されます。
リーダーの破棄を怠ると、パフォーマンスが低下する可能性があります。破壊されていないリーダーは、ガベージ コレクションまで割り当てられたリソースを保持します。これにより、次のような問題が発生する可能性があります。
手動による閉鎖と廃棄SqlDataReader は、最適なパフォーマンスとリソース管理に不可欠です。 using ステートメントを使用すると、自動的に破棄され、リソース リークが防止されるため、効率的なソリューションが提供されます。
以上が`SqlDataReader` を適切に破棄することが SQL Server のパフォーマンスにとって重要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。