自己做的一个网站,放iis上发布后,网站访问速度还不错。
但是过几个小时,网站访问速度会变的非常慢,重启iis也不行。
但是把iis这个站点删掉,重新建一下站点,访问速度又恢复很快了。
前后访问人数都差不多,15分钟内200多人在线吧。
持续一个月了,找不到什么好方法来解决,如果是程序问题该如何来弄呢
但是过几个小时,网站访问速度会变的非常慢,重启iis也不行。
但是把iis这个站点删掉,重新建一下站点,访问速度又恢复很快了。
前后访问人数都差不多,15分钟内200多人在线吧。
持续一个月了,找不到什么好方法来解决,如果是程序问题该如何来弄呢
解决方案 »
- ORM多表查询问题(原谅我,我也是热衷于造轮子的青年)
- CommandName问题
- ASP.NET登录控件如何使用自己的数据库?
- Model作为参数,Objectdatasource+formview绑定做添加修改操作,model属性默认值的设置
- 求"产生n个相同字符的字符串函数"。
- 全世界好像暫時都沒有人能解決的問題。我們連日來搜索了幾乎所有有名的搜索引擎也沒有答案。
- 关于web.config多重定义问题
- ASP.net 的网站源代码
- ASP.NET中如何支持上传大文件(>100M)
- 在.aspx文件中怎么写不进asp代码?急!急!急!
- 菜鸟求助!像我帖子图中的博客文章排列是用什么控件实现的呢?
- 服务器标记的格式不正确
并且90%都是sleeping的连接
conn.close()
在这之前加个conn.dispose()?
/// <summary>
/// 更新数据库记录(SQL句柄)
/// </summary>
/// <param name="strSql">要执行的SQL语句</param>
/// <returns>执行成功返回True,否则返回False</returns>
public override bool ExecuteUpdate(string strSql)
{
try
{
Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = this.conn;
if (inTransaction)
cmd.Transaction = trans;
cmd.CommandText = strSql;
cmd.CommandType = CommandType.Text;
return cmd.ExecuteNonQuery() > 0;
}
catch
{
return false;
}
finally
{
this.conn.Close();
}
} /// <summary>
/// 更新数据库记录(存储过程)
/// </summary>
/// <param name="strSql">SQL句柄</param>
/// <param name="strParams">存储过程变量集</param>
/// <param name="strValues">存储过程内容集</param>
/// <returns>执行成功返回True,否则返回False</returns>
public override bool ExecuteUpdate(string strSql, string[] strParams, object[] strValues)
{
try
{
Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = this.conn;
if (inTransaction)
cmd.Transaction = trans;
if ((strParams != null) && (strParams.Length != strValues.Length))
throw new Exception("查询参数和值不对应!");
cmd.CommandText = strSql;
cmd.CommandType = CommandType.Text;
if (strParams != null)
{
for (int i = 0; i < strParams.Length; i++)
{
SqlParameter param = new SqlParameter(strParams[i], strValues[i]);
cmd.Parameters.Add(param); }
}
return cmd.ExecuteNonQuery() > 0;
}
catch
{
return false;
}
finally
{
this.conn.Close();
}
}
#endregion
#region GetDataSet 重载 /// <summary>
/// 获取数据源DataSet(存储过程)
/// </summary>
/// <param name="strSql">SQL句柄</param>
/// <param name="strParams">变量集</param>
/// <param name="strValues">内容集</param>
/// <returns>返回一个DataSet数据源</returns>
public override DataSet GetDataSet(string strSql, string[] strParams, object[] strValues)
{
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = this.conn;
if (inTransaction)
cmd.Transaction = trans;
if ((strParams != null) && (strParams.Length != strValues.Length))
throw new Exception("查询参数和值不对应!");
cmd.CommandText = strSql;
if (strParams != null)
{
for (int i = 0; i < strParams.Length; i++)
{
SqlParameter param = new SqlParameter(strParams[i], strValues[i]);
cmd.Parameters.Add(param);
}
}
DataSet ds = new DataSet();
SqlDataAdapter ad = new SqlDataAdapter();
ad.SelectCommand = cmd;
ad.Fill(ds);
return ds;
}
catch
{
return null;
}
finally
{
this.conn.Close();
} }
/// <summary>
/// 取数据源DataSet(SQL句柄)
/// </summary>
/// <param name="QueryString">SQL句柄</param>
/// <returns>返回一个DataSet数据源</returns>
public override DataSet GetDataSet(string QueryString)
{
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = this.conn;
if (inTransaction)
cmd.Transaction = trans;
DataSet ds = new DataSet();
SqlDataAdapter ad = new SqlDataAdapter();
cmd.CommandText = QueryString;
ad.SelectCommand = cmd;
ad.Fill(ds);
return ds;
}
catch
{
return null;
}
finally
{
this.Close();
}
}
#endregion
{
connCount++;
if (connCount == 1)
{
_conn.Open();
}
}
/// <summary>
/// 将连接计数减1,如果连接计数为0则关闭连接
/// </summary>
public void CloseConnection()
{
connCount--;
if (connCount <= 0)
{
connCount = 0;
_conn.Close();
}
}
这个sqlhelper是在网上下的,作者是这样描述的
1. 内部不使用具体的ADO.NET对象。使用如IDbConnection,IDbCommand等。所以较容易更换数据库。2. Execute系列方法对连接状态都是自适应,使用连接计数。类似Adapter.Fill方法,若在方法外面已经打开连接,则方法内部不会重新打开连接也不会关闭连接,若方法外面没有打开连接,则方法内部自己打开连接并在方法结束时关闭连接。(ExecuteReader方法不会自己打开数据连接)3. SqlHelper的Execute静态方法系列,可通过静态方法OpenConnection()和CloseConnection()连接多个数据访问操作,可以嵌套。事务也可以这样串联。由于数据打开和关闭、以及事务的管理,都使用计数器,使得在编写一个方法的时候可以先不管外界调用时是否要将其放在一个事务中串联。==================================================================================
这样使用连接计数器,如果连接多了就不会关闭了
/// 执行指定的 Transact-SQL 语句并返回受影响的行数。
/// </summary>
/// <param name="strCmd"></param>
/// <returns></returns>
public int ExecuteNonQuery(string strCmd, CommandType type, params IDbDataParameter[] parameters)
{
try
{
OpenConnection(); IDbCommand cmd = CreateCommandAll(strCmd, type, parameters);
return cmd.ExecuteNonQuery();
}
finally
{
CloseConnection();
}
}
/// <summary>
/// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行。
/// </summary>
/// <param name="strCmd"></param>
/// <returns></returns>
public object ExecuteScalar(string strCmd, CommandType type, params IDbDataParameter[] parameters)
{
try
{
OpenConnection(); IDbCommand cmd = CreateCommandAll(strCmd, type, parameters);
return cmd.ExecuteScalar();
}
finally
{
CloseConnection();
}
}
/// <summary>
/// 执行查询,生成一个DataReader返回数据(此函数内部不会调用OpenConnection和CloseConnection)
/// </summary>
/// <param name="strCmd"></param>
/// <returns></returns>
public IDataReader ExecuteReader(string strCmd, CommandType type, params IDbDataParameter[] parameters)
{
IDbCommand cmd = CreateCommandAll(strCmd, type, parameters);
return cmd.ExecuteReader();
}
/// <summary>
/// 执行查询,并返回一个DataSet对象
/// </summary>
/// <param name="strCmd"></param>
/// <returns></returns>
public DataSet ExecuteDataSet(string strCmd, CommandType type, params IDbDataParameter[] parameters)
{
try
{
OpenConnection(); IDbCommand cmd = CreateCommandAll(strCmd, type, parameters); IDbDataAdapter adapter = _dbProvider.CreateDataAdapter();
adapter.SelectCommand = cmd; DataSet ds = new DataSet();
adapter.Fill(ds); return ds;
}
finally
{
CloseConnection();
}
}
/// <summary>
/// 执行查询,并返回一个DataTable对象
/// </summary>
/// <param name="strCmd"></param>
/// <returns></returns>
public DataTable ExecuteDataTable(string strCmd, CommandType type, params IDbDataParameter[] parameters)
{
try
{
OpenConnection(); IDbCommand cmd = CreateCommandAll(strCmd, type, parameters); IDbDataAdapter adapter = _dbProvider.CreateDataAdapter();
adapter.SelectCommand = cmd; DataSet ds = new DataSet();
adapter.Fill(ds); return ds.Tables[0];
}
finally
{
CloseConnection();
}
} #endregion
把这些方法都贴出来,大家看看,需要怎么改进
9楼的朋友,我想知道,你那样的代码
把return 这个关键字放到catch块里,你确定这以后程序还会执行finaly块吗??我现在迷惑我对return关键字的理解,一下以来我都认为它是所有表达式中优先级很高的,按我的理解,代码遇到了return字样后,会直接把内存地址指针回退到调用处的,就是上一级,而会忽略return后面的所有操作的难道是我理解错误啦???跪求解答
{
Console.Write("i的值是:"+GetCount());
Console.ReadKey();
} private static int GetCount()
{
int i = 1;
try
{
return i;
}
catch (Exception ex)
{
}
finally
{
++i;
Console.Write(" finally ");
}
return i;
}这个问题我告诉你,你自己去测试测试,给你个小程序看看
自己调试下,看下每一步是怎么执行的,在看下结果
using (SqlDr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
这样做可取吗
都是先SqlHelper.OpenConnection();
用完后 SqlHelper.CloseConnection();
论坛签名======================================================================liuxibei1987:你好!
截至 2011-10-28 14:41:54 前:
你已发帖 59 个, 未结贴 0 个;
结贴率为: 100.00%
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖如何给自己的回帖中也加上签名?
http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
论坛签名======================================================================liuxibei1987:你好!
截至 2011-10-28 14:41:54 前:
你已发帖 59 个, 未结贴 0 个;
结贴率为: 100.00%
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖如何给自己的回帖中也加上签名?
http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
现在转ASP.NET中。忽忽。
论坛签名======================================================================liuxibei1987:你好!
截至 2011-10-28 14:41:54 前:
你已发帖 59 个, 未结贴 0 个;
结贴率为: 100.00%
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖如何给自己的回帖中也加上签名?
http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
asp专区的大神啊
所以得转asp.net论坛签名======================================================================liuxibei1987:你好!
截至 2011-10-28 14:41:54 前:
你已发帖 59 个, 未结贴 0 个;
结贴率为: 100.00%
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖如何给自己的回帖中也加上签名?
http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
asp.net做网站不给力啊,我想去学学php了
asp.net很好啊。不懂php。哈哈。
论坛签名======================================================================liuxibei1987:你好!
截至 2011-10-28 15:52:46 前:
你已发帖 60 个, 未结贴 1 个;
结贴率为: 98.33%
当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖如何给自己的回帖中也加上签名?
http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx