【发布时间】:2018-07-25 21:19:07
【问题描述】:
我有一个 exe,它给出了以下错误。
超时。在获得一个之前的超时时间 来自池的连接。这可能是因为所有汇集的 正在使用连接并且已达到最大池大小。
我已经使用使用语句来创建连接对象并关闭 finally 块中的连接。
在exe连接字符串的web.config中,app_pool size最大值为200。
我还使用 sp_who2 命令检查了连接,该命令显示 25 个连接。
private Dictionary<string, SomeObject> SomeMethod(int orderedXmlId, string clientLogFilePath, ref bool errorGettingRMData)
{
Dictionary<string, SomeObject> someDictionary = new Dictionary<string, SomeObject>();
//Create connection object
using (SqlConnection connection = new SqlConnection(ConfigurationSettings.AppSettings["MasterDB"]))
{
SqlCommand command = null;
try
{
//open the connection
connection.Open();
command = new SqlCommand("someSP", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@someParameter", someParameter);
command.CommandTimeout = _commandTimeOut;
using (SqlDataReader someVariable = command.ExecuteReader(CommandBehavior.CloseConnection))
{
if (someVariable != null && someVariable.HasRows)
{
int intId = someVariable.GetOrdinal("intId");
int imageUrl = someVariable.GetOrdinal("imageUrl");
int contentLength = someVariable.GetOrdinal("contentLength");
int path = someVariable.GetOrdinal("path");
int parentId = someVariable.GetOrdinal("parentId");
int propertyId = someVariable.GetOrdinal("propertyId");
while (someVariable.Read())
{
using (SomeObject someUploadObject = new SomeObject())
{
// Avoid this Exception: "An item with the same key has already been added".
if (!someDictionary.ContainsKey(someVariable.GetString(intImageUrlOrdinal)))
{
someUploadObject.OrderedXmlId =
someVariable.GetInt32(intOrderedXMLIdOrdinal);
someUploadObject.ImageUrl = someVariable.GetString(intImageUrlOrdinal);
someUploadObject.ContentLength =
someVariable.GetInt64(intContentLengthOrdinal);
someUploadObject.SaveAsPath = someVariable.GetString(intSaveAsPathOrdinal);
someUploadObject.ParentOrderedXmlId =
someVariable.GetInt32(intParentOrderedXmlIdOrdinal);
someUploadObject.PropertyId = someVariable.GetString(intPropertyIdOrdinal);
//Add to Dictionary
someDictionary.Add(someUploadObject.ImageUrl, someUploadObject);
}
else
{
if (detailedLog)
{
AddToLog("SomeMethod: Image {0}, for id:{1} is already present in someDictionary",
new object[] { someVariable.GetString(imageUrlOrdinal), lId }, 80,
false, true, clientLogFilePath);
}
}
}
}
someVariable.Close();
}
//No records are found i.e. Datareader is empty
else
{
//Do nothing
}
}
}
catch (Exception ex)
{
errorGettingData = true;
Logger.Write2Log("SomeMethod: Error in retrieving uploaded images for id:" + Id + "-" + ex.Message, true, 40, true, logFilePath);
SendMail(MailOption.exception, ex, logFilePath);
}
finally
{
command = null;
if (connection != null)
{
connection.Close();
}
}
//Return list of Dictionary
return someDictionary;
}
} //SomeMethod
知道这里可能出了什么问题吗?
【问题讨论】:
-
您介意向我们展示一些您处理对象的代码吗?
-
仅供参考,如果您使用
using语句,那么您没有关闭连接。
标签: c# asp.net sql-server-2012 ado.net application-pool