程序中过多使用静态变量有何不妥?

vitachuh 2009-02-15 03:53:29
静态变量方便访问;静态方法方便调用...但是过多的使用static会带来什么后果?

google一下,发现全是说使用静态变量、静态方法的优点的,没有缺点么?本来我以为在程序启动时创建的静态变量过多的使用会增加内存开销,但是搜索到的文章里面有个说到,静态变量只创建一次,和普通变量的频繁创建销毁比起来,能节约资源。郁闷,如此说来,静态变量如此完美?在CSDN上搜索到lhx1977的《程序中使用静态变量的优缺点,主要是缺点有那些?》,感觉还是有点迷茫...

静态的缺点,请讲,我已经坐端正了,谢谢。
...全文
668 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
hh252438823 2010-06-17
  • 打赏
  • 举报
回复
学习了,很需要
vitachuh 2009-02-18
  • 打赏
  • 举报
回复
谢谢大家的回复,好像明白了些道理,谢谢。
patrickpan 2009-02-16
  • 打赏
  • 举报
回复
参考内存自动管理机制:绝大部分对象创建,生命周期是相当短,马上被销毁的。对象创建被放在伊甸区。这部分区域内存管理扫描是最频繁的。
一段时间后,没有被标记销毁的对象陆续放在老人区,这部分对象扫描频率相对减少。
再一段时间后,老人区的对象放在基本不扫描销毁的内存区。
如果一个变量,确实在整个程序中从头到尾都要访问到,可以定义为静态变量;如果不是,没有必要,让系统自动销毁释放资源。
zgke 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 h_w_king 的回复:]
个人认为没什么妥和不妥. 一切根据需要来定.
[/Quote]

同意
zjh222 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 vitachuh 的回复:]
引用 12 楼 zjh222 的回复:
引用 6 楼 vitachuh 的回复:

引用 5 楼 zjh222 的回复:
静态变量是可以指高性能的,但是不安全,不符合OO的,就象C语言一样,是面向过程的,可是不利于开发,但性能好

谢谢~
你好,其实我就是对性能上不能理解。
静态变量一启动就占用了资源至关闭。
我可以这样理解不,牺牲资源提高性能?


静态变量是固定的内存地址,如果你要用静态变量,程序会指向这个真实的地址,它不象对象要创建,只要NEW…
[/Quote]

如果象你那样就太不OO了,我说了静态变量在程序运行中的值是固定占用内存的,是不象类一样可能拉圾收集的.
再者太多的静态变,如果你觉得好管理也行,一个项目全部用静态也是可以的,如果这个变量太多,那说不定会比NEW出来的变量或类占的内存还要多...你根据情况和经验合理利用吧
chinesesdn 2009-02-16
  • 打赏
  • 举报
回复
静态变量初始化之后会一直占着内存直到程序结束 如果手动释放的话 以后就用不到了
h_w_king 2009-02-16
  • 打赏
  • 举报
回复
个人认为没什么妥和不妥. 一切根据需要来定.
vitachuh 2009-02-16
  • 打赏
  • 举报
回复
如果完全按照OO的思想设计,但是全部都用static,一旦启动,那不是很完美?

难道静态变量就只有启动慢这么一个缺点?
vitachuh 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jeremychin 的回复:]
举个例子,我看到有些朋友写DAO层时喜欢用静态方法
如果某一天,你的系统要同时支持sql server,oracle...
[/Quote]
Sorry。。。没领悟到你的意思。。
vitachuh 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zjh222 的回复:]
引用 6 楼 vitachuh 的回复:

引用 5 楼 zjh222 的回复:
静态变量是可以指高性能的,但是不安全,不符合OO的,就象C语言一样,是面向过程的,可是不利于开发,但性能好

谢谢~
你好,其实我就是对性能上不能理解。
静态变量一启动就占用了资源至关闭。
我可以这样理解不,牺牲资源提高性能?


静态变量是固定的内存地址,如果你要用静态变量,程序会指向这个真实的地址,它不象对象要创建,只要NEW一次就分配内存,如果NEW的太多:一占…
[/Quote]

谢谢你的回复。
我想问个极端的问题,假设一个常规项目所用变量全是静态变量,会咋样?
zjh222 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vitachuh 的回复:]
引用 5 楼 zjh222 的回复:
静态变量是可以指高性能的,但是不安全,不符合OO的,就象C语言一样,是面向过程的,可是不利于开发,但性能好

谢谢~
你好,其实我就是对性能上不能理解。
静态变量一启动就占用了资源至关闭。
我可以这样理解不,牺牲资源提高性能?

[/Quote]
静态变量是固定的内存地址,如果你要用静态变量,程序会指向这个真实的地址,它不象对象要创建,只要NEW一次就分配内存,如果NEW的太多:一占内存,二耗费对象的创建时间,所以性能就存在问题了.而静态变量只创建一次,直接你的程序退出,性能当然要好的多,我们说的性能是指程序运行时间,而不是占用内存的多少.
jscn123789abc 2009-02-15
  • 打赏
  • 举报
回复
好象 多线程里面很多静态函数...
jeremychin 2009-02-15
  • 打赏
  • 举报
回复
举个例子,我看到有些朋友写DAO层时喜欢用静态方法
如果某一天,你的系统要同时支持sql server,oracle...
DalyQiao 2009-02-15
  • 打赏
  • 举报
回复
会降低启动速度,不过C#好像在需要时才开始初始化,似乎也没什么影响
zhushiheng 2009-02-15
  • 打赏
  • 举报
回复
个人理解:(不要过多的使用static,用到可用之处)
飞天鹰 2009-02-15
  • 打赏
  • 举报
回复
我也想知道,关注中,希望能有更详细的回答
vitachuh 2009-02-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zjh222 的回复:]
静态变量是可以指高性能的,但是不安全,不符合OO的,就象C语言一样,是面向过程的,可是不利于开发,但性能好
[/Quote]
谢谢~
你好,其实我就是对性能上不能理解。
静态变量一启动就占用了资源至关闭。
我可以这样理解不,牺牲资源提高性能?
zjh222 2009-02-15
  • 打赏
  • 举报
回复
静态变量是可以指高性能的,但是不安全,不符合OO的,就象C语言一样,是面向过程的,可是不利于开发,但性能好
vitachuh 2009-02-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 king19840811 的回复:]
静态方法只能由静态类来使用不能实例化


不能体现oo的特性 。个人理解
[/Quote]
谢谢~
我更想知道资源方面的影响。
flying_net 2009-02-15
  • 打赏
  • 举报
回复
如果系统使用多线程,那么使用静态变量就会产生问题!
不便于开发多线程程序
加载更多回复(2)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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