日期:2014-05-20  浏览次数:20490 次

请问一个性能问题,欢迎讨论
我想知道下面两种方式,哪种效率较高:
一、
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的性能问题,到还真没怎么在意过....这个问题估计只有愚翁能给出答案....

另外,我不觉得楼主是在钻牛角尖,支持下.....

------解决方案--------------------