请问一个性能问题,欢迎讨论
我想知道下面两种方式,哪种效率较高:
一、
public static int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) {
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(connString)) {
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
使用:SQLHelper.ExecuteNonQuery(a,b,c)这样开发者使用方便。这是petshop3.0里面的例子
二、
public int ExecuteNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) {
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(connString)) {
PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
使用:
SQLHelper sh=new SQLHelper();
sh.ExecuteNonQuery(a,b,c)
再问:使用using (SqlConnection conn = new SqlConnection(connString))这种方式,在静态里关闭会及时吗?
------解决方案--------------------这个东西不是很重要的.重要的是查询的时候要建好索引..这个性能才是很大的
------解决方案--------------------80%和20% 精力不要放在这种东西上面啊.
------解决方案--------------------一看public static int ExecuteNonQuery有static就不打算用了。
完全为了偷懒不写new
------解决方案--------------------不回答你问题的是因为他们没有使用过 SQLHelper 。
程序里每一个细节都应该考虑。能了解的就了解。
说不用考虑什么什么的,他们是为了完成项目而完成。并没有提高自己的意识。
------解决方案--------------------使用using (SqlConnection conn = new SqlConnection(connString))这种方式
不管在哪里都是没什么问题的。
我没有弄明白的是:如果使用 static的方式会不会造成用户等待的情况。
假设一种情况
1、使用static的方式(也就是方式一)
2、一千个人同时访问(对于大型网站不是很难得的事情吧)
在这种情况下会不会发生有一个人要等到其他的999人都访问完毕之后才会轮到他。
我对于静态函数很不了解,也许我的想法根本就是错误的,不过既然是静态的,那么内存里只会有着一个函数,一千个人都会使用这一个函数,势必会出现等待的情况;
如果说是多线程的话,那么内存里就不止这一个函数了,有多少个线程就会出现多少个函数吗?
如果是这样的话,那么和new 有多大的区别呢?
PS:
我一直使用new的方法,有几点原因:
1、对于静态函数不了解,不敢使用。
2、静态了,存储过程的参数就不好处理了。
3、静态的情况,事务也是不太好处理的。
但是现在看看服务器上网站占用的内存——比我想象的大了许多,访问量不太高就已经达到了386M,SQL才占了200多M。不知道是不是new的原因。
程序也没有缓存什么数据,分页也处理的挺好,这方面是不会占用什么内存的。
要是能够分析出来那些地方占用内存就好了。
------解决方案--------------------个人比较偏向与静态的,方便真的很方便!
不过如果真的很多人同时在用那么肯定会影响速度,
如果用new的话可能会多耗内存,但是用完后马上就释放掉了
有什么好担心的呢?
------解决方案--------------------为什么不把那个类继承IDisposable呢?
在Dispose方法里回收资源呢?
------解决方案--------------------楼上兄弟,C#资源回收它自己会完成吧
---------------------------------------
这点偶强列建议你自已完成回收,因为你根本不知道GC什么时候来执行这个动作.
那么这段时间内,资源岂不是浪费...
对于new和static的性能问题,到还真没怎么在意过....这个问题估计只有愚翁能给出答案....
另外,我不觉得楼主是在钻牛角尖,支持下.....
------解决方案--------------------