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

sunzhong2003 2007-02-05 08:53:47
我想知道下面两种方式,哪种效率较高:
一、
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))这种方式,在静态里关闭会及时吗?
...全文
743 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
自然框架 2007-02-07
  • 打赏
  • 举报
回复
up
JavaK 2007-02-06
  • 打赏
  • 举报
回复
"请问一个性能问题,欢迎讨论 "
我乍看一下,还以为楼主要讨论一下性能力问题呢?呵呵~~
sunzhong2003 2007-02-06
  • 打赏
  • 举报
回复
收获不少
智能大石头 2007-02-06
  • 打赏
  • 举报
回复
楼上有以为提到静态不方便使用事务的问题,其实,你可以把事务作为一个参数传进来的。


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

**************************************
http://www.nnhy.org
智能大石头 2007-02-06
  • 打赏
  • 举报
回复
呵呵,看到这么多人回帖,只想说,支持楼主。

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

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

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

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

**************************************
http://www.nnhy.org
greatqn 2007-02-06
  • 打赏
  • 举报
回复
方法本身没有问题,如果同时10个人使用,变量是局部变量的话就什么事也没有.如果是共用变量的话,就有并发的问题了.

同样用new的时候,同时有10个人使用这个对象的方法,遇到的问题是一样的.
风声3 2007-02-06
  • 打赏
  • 举报
回复
正如楼上分析,static与否方法地址都只有一个,访问效率应该相当,但非static方式还需要new操作,高频使用的时候应该会稍逊一筹。
记得C语言学习时有:把高频访问的变量定义为static可以提高效率,我的印象里static是为了提高效率而设定的关键词;到了C#我想它的语法设计意图是一致的。
所以,我觉得static效率更优。
另外,从发展的角度来看static更底层署结构化范畴的产物,new(这里讨论的)是面向对象,多了封装的效率损失,它带来了OO编程的一切优势,损失一点效率也是可以理解的。
lincai 2007-02-06
  • 打赏
  • 举报
回复
一个静态方法,如果同时10个人使用,那么里面的变量都会影响不?
greatqn 2007-02-06
  • 打赏
  • 举报
回复
我记得方法的话,不管是static还是new,在内存中都只有一份.不可能一千个对象就有一千个方法.所以static和new在调用方法上是一样的,不同的只是数据内存这块.
sunzhong2003 2007-02-06
  • 打赏
  • 举报
回复
TO li45214521 线程安全性?是怎么回事,望指教,谢谢!!
skynice 2007-02-06
  • 打赏
  • 举报
回复
静态方法在内存中只有一个地址,同样,实例方法〔私有、保护、公共〕在内存中也是只有一个地址。每个对象不同的地方是它的属性、字段,同一个类的所有对象在访问某一个方法的时候实际上都共享同一个方法的地址。
从以上可以看出,如果类中全是static方法及变量,在类第一次补访问时,它的所胡静态内容匀被初始化,在程序运行结束关闭后,销毁。而不是static的方法只有在实例化对象后才可以使用。
sunzhong2003 2007-02-05
  • 打赏
  • 举报
回复
TO sp1234
这个事情是不小的,所有的数据操作,都是使用这个来操作。
如果一个地方错,就会全部出错。作为一个好的程序员,你还有野心去做系统分析的话,就应该要注意这些问题,我只想知道,这两种性能如何?为什么?其他的问题,我计较,所以我优秀。
sunzhong2003 2007-02-05
  • 打赏
  • 举报
回复
声明一下:有很多人认为这种问题,没必要讨论,也没必要考虑。
我觉得这就是为什么有些人技术总是提不高的原因了。
发现问题,就比须解决,咱没钱,任何耗费资源的做法都是不可取的,
我就碰到,买个5W的服务器,50到100人,就挂了,因为没考虑性能等问题。
所以各位就只要告诉我这两个哪种性能高点,为什么就行,至于为什么考虑,是因为本人,想提高自己。
sunzhong2003 2007-02-05
  • 打赏
  • 举报
回复
TO fonshen(风声) ,你的经验是哪种好
  • 打赏
  • 举报
回复
因为你做的每一个东西,都会影响到全局。
——————————————————————————————————————————
你看不到小事情上计较性能对全局带来的破坏作用。
  • 打赏
  • 举报
回复
使用using (SqlConnection conn = new SqlConnection(connString))这种方式,在静态里关闭会及时吗?
———————————————————————————————————————————
没有任何区别。

即使不是static方法,也照样可能被多线程并发执行。不是说写成非static的方法就一定安全。

即使写了static,也不是同一进程执行达方法就分身变成并行执行的了。写成static,只要conn是局部的,安全程度与非static方法是一样的。
风声3 2007-02-05
  • 打赏
  • 举报
回复
如果你不清楚就100%不用考虑这个问题,如果正在实施大型项目,两种方案测试一下孰优孰劣马上就看出来了
sunzhong2003 2007-02-05
  • 打赏
  • 举报
回复
lovebanyi(风云),我就搞不懂拉,为什么不要放到这些东西上面,你做过大中型的系统吗?如果做过,你就会考虑,因为你做的每一个东西,都会影响到全局。
我提的问题,也是一个技术问题,你知道就说说嘛,藏着噎着干吗呢?呵呵
lovebanyi 2007-02-05
  • 打赏
  • 举报
回复
这个是经验..啊.
lovebanyi 2007-02-05
  • 打赏
  • 举报
回复
80%和20% 精力不要放在这种东西上面啊.
加载更多回复(27)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧