首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

请教一个性能有关问题,欢迎讨论

2012-01-18 
请问一个性能问题,欢迎讨论我想知道下面两种方式,哪种效率较高:一、publicstaticintExecuteNonQuery(string

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

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

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


我也很占同搂主的精神,一个地方是应该很好的研究一下的,一个页面要访问多少次数据库呀!

不弄好了效率一定会受到影响的。


[解决办法]
http://blog.csdn.net/jyk

这里有我的处理数据访问的方法,不知道对搂主有没有帮助。
[解决办法]
方法本身没有问题,如果同时10个人使用,变量是局部变量的话就什么事也没有.如果是共用变量的话,就有并发的问题了.

同样用new的时候,同时有10个人使用这个对象的方法,遇到的问题是一样的.
[解决办法]
呵呵,看到这么多人回帖,只想说,支持楼主。

这个静态问题,我可以从火海里面爬出来的,碰到了很多次致命打击呀。

第一次,我把连接用的那个变量conn声明为静态,发现速度真快,但是当访问人数节节上升的时候,我盯着日志,人数达到某个边界的时候,一下子,所有访问者,都崩溃了,呵呵。
后来改了每次都new,慢了好多……

用using,很明智,它的意思就是,在using的范围内分配的资源,在离开这个范围时,都将会被回收,包括连接关闭、打开的文件关闭。renturn也算离开这个范围,所以,你更不不用担心这个方法是静态还是非静态,因为他们的作用一摸一样,建议使用静态。(我刚看你第一个帖子的时候就纳闷了,写两个一摸一样的方法干嘛哪)呵呵,所有不涉及类成员的方法,建议使用静态。

这个跟线程安全有什么关系呀?????搞不懂。
线程安全的意思是说,如果多个线程调用这个方法,要保证安全,不冲突。认真看看,方法里面用到的变量,都是参数传进来的,根本不存在冲突的问题。线程安全的问题倒是比较多出现在静态变量上,比如我上面碰到的那次(静态Conn),就属于线程安全问题,所有使用这个静态Conn的方法,不管你静态不静态,都是线程不安全的。

**************************************
http://www.nnhy.org
[解决办法]
楼上有以为提到静态不方便使用事务的问题,其实,你可以把事务作为一个参数传进来的。


近来对一个省级电网的办公网站进行优化,收获不少,大家可以一起交流一下。

**************************************
http://www.nnhy.org

热点排行