下面一段程序中
public static DataSet web_39_checkuser(string phs, ref int if_true, out int returnValue)
{
SqlConnection oConn = new SqlConnection(strconn);
returnValue = 0;
SqlDataAdapter oAdp = new SqlDataAdapter("web_sms.web_39_checkuser", oConn);
oAdp.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter[] arParms = new SqlParameter[2];
arParms[0] = new SqlParameter("@phs", SqlDbType.VarChar, 11 );
arParms[0].Value = phs;
arParms[1] = new SqlParameter("@if_true", SqlDbType.Int, 1 );
arParms[1].Direction = ParameterDirection.Output; foreach(SqlParameter p in arParms)
oAdp.SelectCommand.Parameters.Add(p); DataSet oDs = new DataSet();
oConn.Open();
try
{
oAdp.Fill(oDs);
}
catch
{
returnValue = 1;
}
try
{
if_true = Int32.Parse( arParms[1].Value.ToString());
}
catch
{
returnValue = 1;
} oConn.Close();
return oDs;
}
这段程序用静态方法实现了数据库操作,作者解释是为了避免产生多个连接实例,因为之前出现过ASP。NET要求SQL SERVER 连接数目太多而被拒绝。采用此方法后问题解决了。但是我想这样就不允许多线程,只允许每个线程顺序访问,假设每个连接都耗时较长,那么数据库操作不就相当慢?请高手解答我的疑问,谢谢!
public static DataSet web_39_checkuser(string phs, ref int if_true, out int returnValue)
{
SqlConnection oConn = new SqlConnection(strconn);
returnValue = 0;
SqlDataAdapter oAdp = new SqlDataAdapter("web_sms.web_39_checkuser", oConn);
oAdp.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter[] arParms = new SqlParameter[2];
arParms[0] = new SqlParameter("@phs", SqlDbType.VarChar, 11 );
arParms[0].Value = phs;
arParms[1] = new SqlParameter("@if_true", SqlDbType.Int, 1 );
arParms[1].Direction = ParameterDirection.Output; foreach(SqlParameter p in arParms)
oAdp.SelectCommand.Parameters.Add(p); DataSet oDs = new DataSet();
oConn.Open();
try
{
oAdp.Fill(oDs);
}
catch
{
returnValue = 1;
}
try
{
if_true = Int32.Parse( arParms[1].Value.ToString());
}
catch
{
returnValue = 1;
} oConn.Close();
return oDs;
}
这段程序用静态方法实现了数据库操作,作者解释是为了避免产生多个连接实例,因为之前出现过ASP。NET要求SQL SERVER 连接数目太多而被拒绝。采用此方法后问题解决了。但是我想这样就不允许多线程,只允许每个线程顺序访问,假设每个连接都耗时较长,那么数据库操作不就相当慢?请高手解答我的疑问,谢谢!
解决方案 »
- 如何显示当前时间?
- SQL 存储过程中的 output 怎么用?在程序里我要怎么调用
- 怎么用javascript调用类中的方法
- 一段用jmail发邮件的代码出错,请各位帮忙。
- 100分求微软开发工具系列(包括开发工具、数据模型设计、软件配置、测试工具、项目管理、Bug管理等)产品名称和下载地址
- 如何获取用户的角色
- XML读取属性的问题~~
- 重金相求:在treeview的节点上点击右键弹出菜单?????
- 我没有xp盘,怎么添加iis,网上有下的吗?
- 有没有从ASP转过来的,有问题要问?
- 100分倾家荡产:请问各位大师能否给我一个用asp.net(C#),数据源使用SQL SERVER来制作一个报表的详细步骤或代码,我现在就是登陆错误,我
- 能不能用ADSL(IP)做路由连成一个小网络?
oConn.Close();//关闭连接
return oDs;//将所需要的数据集记录到服务器内存中并返回如果不用静态方法就这样:
oConn.Close();//关闭连接
oConn=null;//清除连接实例
return oDs;//将所需要的数据集记录到服务器内存中并返回
因为ado.net是用连接池
而常规方法必须先创建一个对象。至于方法内部的代码是否是单线程的,与static无关。就是说static比常规方法少了一个对象的创建过程,仅此而已。
从表面上看,静态(static)成员可以通过 类名.成员名 来直接调用,而实例(instance)成员需要生成一个对象后才能调用。同一个操作,性能当然静态成员好但其实区别是跟对象设计有关的,一般来说实例成员跟实例的状态有关,某个方法的调用可能需要访问当前对象的状态,并改变其状态,从而影响其他方法的结果而静态成员是跟类本身有关,与单独的实例状态无关。但静态成员不要太多了,否则就沦为以前的procedural programming风格了,也许对象需要重新设计或重构。静态成员往往会在多线程下操作,需要做同步化控制
http://community.csdn.net/Expert/topic/3400/3400778.xml?temp=.2661707
刚发帖询问过