是否整个网站只有一个static静态数据库连接,效率将会提高?

indusl 2011-07-15 06:16:25
或是完全不可用!会引起队列延迟等问题!

否则为何还要每次访问数据库都要new 一个connection呢?弄一个静态的connection不行吗?
...全文
1244 102 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
102 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhaixiaoqi_ 2014-02-14
  • 打赏
  • 举报
回复
一个静态的连接,多线程这快肯定有性能问题,一个线程倒是无所谓。 多个线程操作一个 静态对象,这个线程访问的时候另外一个线程是访问不到的, 可以对这个对象加锁,必须要等这个线程用完后,下一个线程才可以使用这个资源, 一个静态链接确实可以节约内存,但是速度不容乐观。
鱼头506 2013-06-30
  • 打赏
  • 举报
回复
这篇文章令我豁然开朗了许多,理清了需要的一些东西,也理解楼主的疑惑,不过楼主要静心先思考下了,本身我也在纠结SqlConnection 是静态还是实例化怎么处理最好,看了这里的讨论明白了。否则为何还要每次访问数据库都要new 一个connection呢?弄一个静态的connection不行吗?个人随便通俗理解:好比许多人去一个城镇,如果路只有一条而且一次只能过一个人,那么过去一个人后只能等他过了其他人才能过。而new 一个connection,就代表到这个城镇开的很多路,可以很多人根据不同的路同时到这个城镇。静态方法就是每个来到城镇的人,可以根据自己的需要借用自己的东西,用完就拿回来放好,等其他人使用,为什么这样不会引起并发的问题?比如大家同时进一个药房,但进一个人就有一个专员接待,你说这样是不是不引起并发。但到城镇的路如果只有一条就只能一个个人排队进城,但一个药房就可以有多个专员,而且可以根据来的客户的数量来安排专员,可以一对一服务,所以一个会引起并发,一个不会! 这样理解不知道确当多少,就当给个分析,见笑了
virusswb 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 karascanvas 的回复:
引用 5 楼 indusl 的回复:

但是为什么整个网站只有一个 静态connection是不行的呢?为什么整个网站只有一个静态的Response就可以了呢?



静态的Response是啥,肯定是楼主发明的吧。


Response对象不时静态的吗,否则你为什么可以直接在页面中使用呢,大哥?
[/Quote]你仔细看看,response是从那里出来的,是一个属性,是context的一个属性,一次请求的context和另一个请求的context不是一个。要不然大家是一个的话,那么别人输出的内容是不是就输出到你的页面上了。
indusl 2011-07-20
  • 打赏
  • 举报
回复
继续顶
rkjk123456 2011-07-20
  • 打赏
  • 举报
回复
没用着3层 现在都是用LINQ TO SQL
Lisliefor 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 indusl 的回复:]
或是完全不可用!会引起队列延迟等问题!

否则为何还要每次访问数据库都要new 一个connection呢?弄一个静态的connection不行吗?
[/Quote]

ADO.net已实现了连接池,并且如果连接字符串配置如果没有写明pooling=false,连接池默认是开启的。
如果不是服务器刚开启后的第一次new connection,那么所有new connection的操作都只是从连接池中获取一个链接,而不是重新创建一个物理连接,connection实例调用的close()和dispose()方法,只是释放连接。

不太明白静态connection的意思!连接用了就要释放,不要长时间保持状态,否则,对于服务器、对于网络都是一个负担。
Lisliefor 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 indusl 的回复:]

引用 8 楼 karascanvas 的回复:
引用 5 楼 indusl 的回复:

但是为什么整个网站只有一个 静态connection是不行的呢?为什么整个网站只有一个静态的Response就可以了呢?



静态的Response是啥,肯定是楼主发明的吧。


Response对象不时静态的吗,否则你为什么可以直接在页面中使用呢,大哥?
[/Quote]

Response是webform的内置对象,所以可以直接用,不是因为它是静态对象的缘故。
indusl 2011-07-20
  • 打赏
  • 举报
回复
继续顶
danjiewu 2011-07-20
  • 打赏
  • 举报
回复
函数、子程序这些都是高级语言才有的概念,汇编只关心指令和数值
indusl 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 86 楼 danjiewu 的回复:]
就是这样的,在汇编里根本不存在方法的概念,更不存在什么静态不静态的区别了。
[/Quote]

汇编里应该有子程序的概念吧,子程序不就是函数吗
danjiewu 2011-07-20
  • 打赏
  • 举报
回复
就是这样的,在汇编里根本不存在方法的概念,更不存在什么静态不静态的区别了。
indusl 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 84 楼 danjiewu 的回复:]
每次调用方法都有压栈出栈的过程,返回值在栈中,各个线程的栈是独立的,互不干扰,明白了?
[/Quote]

那你的意思是静态方法和普通的方法调用完全没有区别了?

普通的方法不夜是都有压栈出栈的过程,然后返回值在栈中?
danjiewu 2011-07-20
  • 打赏
  • 举报
回复
每次调用方法都有压栈出栈的过程,返回值在栈中,各个线程的栈是独立的,互不干扰,明白了?
yizhili 2011-07-20
  • 打赏
  • 举报
回复
一个静态数据库连接就好比银行里只有一个柜台,如果你去的时候前面有人,你就得排队等着。但对于多线程程序来说,排队不是默认的行为,所以就是大家插队,抢着让柜员(静态数据库连接)来接待,结果就是混乱——这就是所谓的并发问题。

静态方法可以每次调用建立一个新连接,就好比你是银行的VIP,每次去银行会专门派一个人来接待你,因此你不用等。对于程序来说,可以看作每个人都是VIP,会有一个专员(调用静态方法时建立的连接)来接待,既不需等待也不会产生混乱。

[Quote=引用 71 楼 indusl 的回复:]

静态方法也只占用一块内存空间,它的返回值也只占用一块内容, 你这个人取钱返回200元,那个人取钱返回500元,为什么就不会引起并发的问题?

静态的数据库连接也只占用一块内存空间,你这个人用这个连接去200元,那个人用连接取500元,为什么就会出现并发问题???
[/Quote]
indusl 2011-07-20
  • 打赏
  • 举报
回复
哎。。。
凤凰涅檠 2011-07-20
  • 打赏
  • 举报
回复
sqlconnection 又不是全局的,它是要被局部使用的 从面向对象的角度看,当然需要实例化
a344586704 2011-07-20
  • 打赏
  • 举报
回复
忽忽 冷静点,静下心去看下别人给的示例;
尤其拿着你的疑问在这里纠结,不如自己去主动学习;
就算天上会掉馅饼,你不会自主,也是惘然;
baysos 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 87 楼 indusl 的回复:]
引用 86 楼 danjiewu 的回复:
就是这样的,在汇编里根本不存在方法的概念,更不存在什么静态不静态的区别了。


汇编里应该有子程序的概念吧,子程序不就是函数吗
[/Quote]
哈哈,计算机什么时候变的这么智能了?
sogood1987 2011-07-20
  • 打赏
  • 举报
回复
一栋办公大楼只有一个坑,但是有几千个人上班。一天,一个人占了这个坑,加锁(开事务)办事,突然来了百来个人占坑办急事,如果第一个人只用0.1s,也许第一百个人才杯具。如果这个人用个5s,也许第二个人就杯具了。就这样,连接少,访问人少一多就坏事了
moonlover 2011-07-19
  • 打赏
  • 举报
回复
不觉得这样效率高,就跟单线程和多线程一样
加载更多回复(82)

62,243

社区成员

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

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

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

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