问题描述
今天听别人说的,但我觉得不会呀,因为像petshop,communityserver这些著名的代码都声明了不少static方法,但是我又不确定,请高手给出答案和分析,谢谢
解决方案
解决方案二:
如果不放心,可以自己测试一下。不过真的要考虑静态方法和成员方法的效率差异的程序一定是神写的。
解决方案三:
该回复于2007-12-04 11:20:11被版主删除
解决方案四:
方法调用频繁的话,采用Static性能可能会更加好些.
解决方案五:
采用Static是相对于频繁调用而建立的静态机制,此机制在程序运行开始到结束始终存在于内存当中,若不使用Static则每次需要调用类的时候则需要new一次,但new一次的性能相对于内存较低的用户来说是可行的,则对于程序而言没用任何影响,只是方便程序员进行编码工作。
解决方案六:
跟你说这话的人是蔡鸟,static会降低程序灵活性,多用singleton,interfaceandabstractclass
解决方案七:
恩,顶楼上
解决方案八:
到底会不会影响速度,影响大不?
解决方案九:
中小项目采用静态方法还是不错的。
解决方案十:
我还是很迷糊
解决方案十一:
多用Singleton=================一看就是业余选手。设计模式不是拿来到处撒的。不要为了使用模式而使用模式。采用static可以减少一些函数呼叫的开销,但是多数情况下不是十分要命的一件事情。使用ReSharper之类的IDE插件的话,会自动提示那些方法可以设为static,十分方便。
解决方案十二:
没什么大影响,楼主放心。
解决方案十三:
多用Singleton是相对于使用静态的object来说的,Singleton是离不开static的.lextm知道你是专业选手.
解决方案十四:
测试代码privatestaticvoidStaticProc(){for(inti=0;i<10000;i++);}privatevoidUnstaticProc(){for(inti=0;i<10000;i++);}privatevoidbutton1_Click(objectsender,EventArgse){longvTickCount=Environment.TickCount;for(intj=0;j<1000;j++)UnstaticProc();Console.WriteLine("非静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)StaticProc();Console.WriteLine("静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)UnstaticProc();Console.WriteLine("非静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)StaticProc();Console.WriteLine("静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)UnstaticProc();Console.WriteLine("非静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)StaticProc();Console.WriteLine("静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)UnstaticProc();Console.WriteLine("非静态方法耗时:{0}毫秒",vTickCount);vTickCount=Environment.TickCount;for(intj=0;j<1000;j++)StaticProc();Console.WriteLine("静态方法耗时:{0}毫秒",vTickCount);}
测试采样[code=BatchFile]非静态方法耗时:1638812毫秒静态方法耗时:1638890毫秒非静态方法耗时:1638906毫秒静态方法耗时:1638937毫秒非静态方法耗时:1638953毫秒静态方法耗时:1638984毫秒非静态方法耗时:1639000毫秒静态方法耗时:1639031毫秒--------------非静态方法耗时:1778078毫秒静态方法耗时:1778093毫秒非静态方法耗时:1778125毫秒静态方法耗时:1778140毫秒非静态方法耗时:1778156毫秒静态方法耗时:1778187毫秒非静态方法耗时:1778203毫秒静态方法耗时:1778234毫秒[/code]分析[code=BatchFile]估计是内存垃圾原来越多,导致越来越慢可以看到有一组数据只相差6毫秒>静态方法耗时:1638890毫秒>非静态方法耗时:1638906毫秒就是说调用1000次相差6毫秒(这个时间还会受其他因素影响,比如:其他线程正消耗CPU)结论是静态方法和非静态方法的调用时间差小于千分之1毫秒(排除机器的差别,最后也不能确定谁快谁慢)总之对程序的效率影响完全可以忽略[/code]最后:楼主要搞清楚静态方法和非静态方法的区别--静态方法是通过类本身调用,而非静态方法必须通过类实例来调用。可以在非静态元素中访问静态元素但不能在静态元素中访问非静态元素
解决方案十五:
多用Singleton=============whenuseSingleton,ualsoneedstaticmethodorfield...whenuknow'static'meanwhatthenuwillknowwhenushoulduse'static'