.NET 3.5 (C#) と SQL Server 2005 (クライアント用) を実行しています。実行するコードは回帰計算を行うもので、少し複雑です。サイトで複数のページを実行すると、次のエラーが発生します。
.NET Framework execution was aborted by escalation policy because of out of memory.
System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.
System.InvalidOperationException:
これの根本的な原因は何かを突き止めようとしています。それはデータベースの問題ですか、それとも私の C## コードですか? または、クエリを実行するときのロックとの同時実行ですか? または何か他のもの?
コードはここでエラーになっています:
erver.ScriptTimeout = 300;
string returnCode = string.Empty;
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MainDll"].ToString())) {
connection.Open();
using (SqlCommand command = new SqlCommand(sql.ToString(), connection)) {
command.CommandType = CommandType.Text;
command.CommandTimeout = 300;
returnCode = (string)command.ExecuteScalar();
//Dispose();
}
//Dispose();
}
当社の請負業者は、App_Code/sqlHelper.s ファイルで SQL 接続を支援するためのコードを多数作成しました。それらのいくつかは次のようなものです:
public static SqlDataReader GetDataReader(string sql, string connectionString, int connectionTime) {
lock (_lock) {
SqlConnection connection = null;
try {
connection = GetConnection(connectionString);
//connection.Open();
using (SqlCommand cmd = new SqlCommand(sql, connection)) {
cmd.CommandTimeout = connectionTime;
WriteDebugInfo("GetDataReader", sql);
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
catch (Exception e) {
if (connection != null)
connection.Dispose();
throw new DataException(sql, connectionString, e);
}
}
}
どこかでメモリの割り当てを解除する必要がありますか?