当初这样用,是因为很方便,呵呵,性能跟这有什么样的影响?
不能帮我解说一下,用static跟不用static有什么区别吗??那什么情况下才用static呢?
14 个解决方案
#1
静态的性能应该更好
#2
肯定有影响
加了static预先会分配内存
特别具体的我也不太清楚
加了static预先会分配内存
特别具体的我也不太清楚
#3
就函数执行效率来讲,性能没有任何区别。
但是非静态函数需要创建一个对象才能调用,因此构造和销毁这个对象需要占用cpu资源,而这个对象也需要占用内存资源。从这个角度来讲静态函数更好一点。
静态函数在第一次使用的时候会编译成本地代码,不过这个是避免不了的,所有.net程序都是这样的。
但是非静态函数需要创建一个对象才能调用,因此构造和销毁这个对象需要占用cpu资源,而这个对象也需要占用内存资源。从这个角度来讲静态函数更好一点。
静态函数在第一次使用的时候会编译成本地代码,不过这个是避免不了的,所有.net程序都是这样的。
#4
感觉静态一定会影响性能.
看微软的101samples,或一些经典的开源代码,都是oo设计,类里的方法有静态的,但是好象非常少.
我感觉应该具体问题具体分析.
看微软的101samples,或一些经典的开源代码,都是oo设计,类里的方法有静态的,但是好象非常少.
我感觉应该具体问题具体分析.
#5
http://topic.csdn.net/t/20060407/16/4670661.html
http://zhidao.baidu.com/question/67118374.html
关于静态方法与非静态方法的执行效率(C#)
以前看到许多网友认为静态方法要比实例方法在执行效率上要快一些,当初不敢苟同。查过一些资料,发现这种说法似乎并不无道理。
想要比较静态方法与非静态方法的执行效率,需要对CLR在调用静态方法与非静态方法时的不同之处要有一个了解。
静态方法是与类相关联的,CLR在调用一个静态方法时需要做的事情就是找到定义该方法的类型即可实现调用;而在调用非静态方法时,为了保证运行安全,CLR会对我们的源代码进行验证并额外的生成一些IL中间代码来确保运行安全,所以在调用一个非静态方法时,CLR首先是判定被调用对象是否为NULL,如果为NULL,则引发一个异常,反之,则根据对象推荐出其类型,最后实现调用。可以看出来,在调用静态方法来非静态方法时,后者比前者多做了一些工作,这将造成性能上的损失。所以,静态方法在执行效率上可能要比非静态方法要好一些(但我觉得这并不明显)。
尽管如此,但我认为,静态方法比非静态方法执行效率好并不是我们应该大量使用静态方法的理由。静态方法与非静态方法只是用于区别不同的语义而已.
http://zhidao.baidu.com/question/67118374.html
关于静态方法与非静态方法的执行效率(C#)
以前看到许多网友认为静态方法要比实例方法在执行效率上要快一些,当初不敢苟同。查过一些资料,发现这种说法似乎并不无道理。
想要比较静态方法与非静态方法的执行效率,需要对CLR在调用静态方法与非静态方法时的不同之处要有一个了解。
静态方法是与类相关联的,CLR在调用一个静态方法时需要做的事情就是找到定义该方法的类型即可实现调用;而在调用非静态方法时,为了保证运行安全,CLR会对我们的源代码进行验证并额外的生成一些IL中间代码来确保运行安全,所以在调用一个非静态方法时,CLR首先是判定被调用对象是否为NULL,如果为NULL,则引发一个异常,反之,则根据对象推荐出其类型,最后实现调用。可以看出来,在调用静态方法来非静态方法时,后者比前者多做了一些工作,这将造成性能上的损失。所以,静态方法在执行效率上可能要比非静态方法要好一些(但我觉得这并不明显)。
尽管如此,但我认为,静态方法比非静态方法执行效率好并不是我们应该大量使用静态方法的理由。静态方法与非静态方法只是用于区别不同的语义而已.
#6
所有类都用静态不可取
应该是常用的类、方法、函数用静态
支持findcaiyzh
现在内存不跟以前一样,所以静态一般情况下会比非静态的性能好
应该是常用的类、方法、函数用静态
支持findcaiyzh
现在内存不跟以前一样,所以静态一般情况下会比非静态的性能好
#7
照大家这种说话,也就是说,用静态不会有性能差,或者说,相差太远?
可我的所有类中都用了的,呵呵
唉,那么就不是这个原因了
我的程序现在有点问题,找不出原因,太晕了,请看我的最新贴,帮忙看看是什么原因??
http://topic.csdn.net/u/20081103/11/d4e39d79-ccdb-46fc-8b71-a8d86c8cc2b6.html
可我的所有类中都用了的,呵呵
唉,那么就不是这个原因了
我的程序现在有点问题,找不出原因,太晕了,请看我的最新贴,帮忙看看是什么原因??
http://topic.csdn.net/u/20081103/11/d4e39d79-ccdb-46fc-8b71-a8d86c8cc2b6.html
#8
静态的一直存在内存中
静态的方法直接通过 类名.方法名 很占内存资源 多了会卡
访问的人多了就会卡
而 非静态方法 用到时候会占用一下资源 所以资源能及时释放 性能当然会好多了!!
静态的方法直接通过 类名.方法名 很占内存资源 多了会卡
访问的人多了就会卡
而 非静态方法 用到时候会占用一下资源 所以资源能及时释放 性能当然会好多了!!
#9
我也觉得静态好,现在内存便宜,我一台上CSDN的机器都配了4GB的内存。
#10
除非你用了无穷多静态变量,就性能而言,一般来说,因为不需要再生成对象,静态的方法也许会更好些
但如果你用了大量的静态函数,非常可能,你还是在做procedural编程。并不是说procedural编程不好,而且在于你是在做高层次的还是低层次的抽象,代码是否好维护?
而且在大项目中,静态变量的问题会造成依赖问题,测试要用mock也会有问题,而且大概也无法再用多态之类的玩意了
但如果你用了大量的静态函数,非常可能,你还是在做procedural编程。并不是说procedural编程不好,而且在于你是在做高层次的还是低层次的抽象,代码是否好维护?
而且在大项目中,静态变量的问题会造成依赖问题,测试要用mock也会有问题,而且大概也无法再用多态之类的玩意了
#11
思归老大?来CSDN了一年多了,第一次见思归老大。。。小激动一下
就像大家说的一样,静态始终都会在存在,动态应该是在需要的是要创建,但最好要在不需要的时候释放
(虽然GC也会自动回收的)。个人觉得,静态变量应该慎重使用。
就像大家说的一样,静态始终都会在存在,动态应该是在需要的是要创建,但最好要在不需要的时候释放
(虽然GC也会自动回收的)。个人觉得,静态变量应该慎重使用。
#12
第一次离名人这么近...
纯帮顶...
纯帮顶...
#13
终于见到3个钻石的了
好激动!
好激动!
#14
分不够分的,汗,不好意思,下次加多点分!呵呵
#1
静态的性能应该更好
#2
肯定有影响
加了static预先会分配内存
特别具体的我也不太清楚
加了static预先会分配内存
特别具体的我也不太清楚
#3
就函数执行效率来讲,性能没有任何区别。
但是非静态函数需要创建一个对象才能调用,因此构造和销毁这个对象需要占用cpu资源,而这个对象也需要占用内存资源。从这个角度来讲静态函数更好一点。
静态函数在第一次使用的时候会编译成本地代码,不过这个是避免不了的,所有.net程序都是这样的。
但是非静态函数需要创建一个对象才能调用,因此构造和销毁这个对象需要占用cpu资源,而这个对象也需要占用内存资源。从这个角度来讲静态函数更好一点。
静态函数在第一次使用的时候会编译成本地代码,不过这个是避免不了的,所有.net程序都是这样的。
#4
感觉静态一定会影响性能.
看微软的101samples,或一些经典的开源代码,都是oo设计,类里的方法有静态的,但是好象非常少.
我感觉应该具体问题具体分析.
看微软的101samples,或一些经典的开源代码,都是oo设计,类里的方法有静态的,但是好象非常少.
我感觉应该具体问题具体分析.
#5
http://topic.csdn.net/t/20060407/16/4670661.html
http://zhidao.baidu.com/question/67118374.html
关于静态方法与非静态方法的执行效率(C#)
以前看到许多网友认为静态方法要比实例方法在执行效率上要快一些,当初不敢苟同。查过一些资料,发现这种说法似乎并不无道理。
想要比较静态方法与非静态方法的执行效率,需要对CLR在调用静态方法与非静态方法时的不同之处要有一个了解。
静态方法是与类相关联的,CLR在调用一个静态方法时需要做的事情就是找到定义该方法的类型即可实现调用;而在调用非静态方法时,为了保证运行安全,CLR会对我们的源代码进行验证并额外的生成一些IL中间代码来确保运行安全,所以在调用一个非静态方法时,CLR首先是判定被调用对象是否为NULL,如果为NULL,则引发一个异常,反之,则根据对象推荐出其类型,最后实现调用。可以看出来,在调用静态方法来非静态方法时,后者比前者多做了一些工作,这将造成性能上的损失。所以,静态方法在执行效率上可能要比非静态方法要好一些(但我觉得这并不明显)。
尽管如此,但我认为,静态方法比非静态方法执行效率好并不是我们应该大量使用静态方法的理由。静态方法与非静态方法只是用于区别不同的语义而已.
http://zhidao.baidu.com/question/67118374.html
关于静态方法与非静态方法的执行效率(C#)
以前看到许多网友认为静态方法要比实例方法在执行效率上要快一些,当初不敢苟同。查过一些资料,发现这种说法似乎并不无道理。
想要比较静态方法与非静态方法的执行效率,需要对CLR在调用静态方法与非静态方法时的不同之处要有一个了解。
静态方法是与类相关联的,CLR在调用一个静态方法时需要做的事情就是找到定义该方法的类型即可实现调用;而在调用非静态方法时,为了保证运行安全,CLR会对我们的源代码进行验证并额外的生成一些IL中间代码来确保运行安全,所以在调用一个非静态方法时,CLR首先是判定被调用对象是否为NULL,如果为NULL,则引发一个异常,反之,则根据对象推荐出其类型,最后实现调用。可以看出来,在调用静态方法来非静态方法时,后者比前者多做了一些工作,这将造成性能上的损失。所以,静态方法在执行效率上可能要比非静态方法要好一些(但我觉得这并不明显)。
尽管如此,但我认为,静态方法比非静态方法执行效率好并不是我们应该大量使用静态方法的理由。静态方法与非静态方法只是用于区别不同的语义而已.
#6
所有类都用静态不可取
应该是常用的类、方法、函数用静态
支持findcaiyzh
现在内存不跟以前一样,所以静态一般情况下会比非静态的性能好
应该是常用的类、方法、函数用静态
支持findcaiyzh
现在内存不跟以前一样,所以静态一般情况下会比非静态的性能好
#7
照大家这种说话,也就是说,用静态不会有性能差,或者说,相差太远?
可我的所有类中都用了的,呵呵
唉,那么就不是这个原因了
我的程序现在有点问题,找不出原因,太晕了,请看我的最新贴,帮忙看看是什么原因??
http://topic.csdn.net/u/20081103/11/d4e39d79-ccdb-46fc-8b71-a8d86c8cc2b6.html
可我的所有类中都用了的,呵呵
唉,那么就不是这个原因了
我的程序现在有点问题,找不出原因,太晕了,请看我的最新贴,帮忙看看是什么原因??
http://topic.csdn.net/u/20081103/11/d4e39d79-ccdb-46fc-8b71-a8d86c8cc2b6.html
#8
静态的一直存在内存中
静态的方法直接通过 类名.方法名 很占内存资源 多了会卡
访问的人多了就会卡
而 非静态方法 用到时候会占用一下资源 所以资源能及时释放 性能当然会好多了!!
静态的方法直接通过 类名.方法名 很占内存资源 多了会卡
访问的人多了就会卡
而 非静态方法 用到时候会占用一下资源 所以资源能及时释放 性能当然会好多了!!
#9
我也觉得静态好,现在内存便宜,我一台上CSDN的机器都配了4GB的内存。
#10
除非你用了无穷多静态变量,就性能而言,一般来说,因为不需要再生成对象,静态的方法也许会更好些
但如果你用了大量的静态函数,非常可能,你还是在做procedural编程。并不是说procedural编程不好,而且在于你是在做高层次的还是低层次的抽象,代码是否好维护?
而且在大项目中,静态变量的问题会造成依赖问题,测试要用mock也会有问题,而且大概也无法再用多态之类的玩意了
但如果你用了大量的静态函数,非常可能,你还是在做procedural编程。并不是说procedural编程不好,而且在于你是在做高层次的还是低层次的抽象,代码是否好维护?
而且在大项目中,静态变量的问题会造成依赖问题,测试要用mock也会有问题,而且大概也无法再用多态之类的玩意了
#11
思归老大?来CSDN了一年多了,第一次见思归老大。。。小激动一下
就像大家说的一样,静态始终都会在存在,动态应该是在需要的是要创建,但最好要在不需要的时候释放
(虽然GC也会自动回收的)。个人觉得,静态变量应该慎重使用。
就像大家说的一样,静态始终都会在存在,动态应该是在需要的是要创建,但最好要在不需要的时候释放
(虽然GC也会自动回收的)。个人觉得,静态变量应该慎重使用。
#12
第一次离名人这么近...
纯帮顶...
纯帮顶...
#13
终于见到3个钻石的了
好激动!
好激动!
#14
分不够分的,汗,不好意思,下次加多点分!呵呵