把方法声明为satatic,对程序性能会有影响??? 方法调用频繁的话,采用Static性能可能会更加好些. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 采用Static是相对于频繁调用而建立的静态机制,此机制在程序运行开始到结束始终存在于内存当中,若不使用Static则每次需要调用类的时候则需要new一次,但new一次的性能相对于内存较低的用户来说是可行的,则对于程序而言没用任何影响,只是方便程序员进行编码工作。 跟你说这话的人是蔡鸟,static 会降低程序灵活性, 多用singleton, interface and abstract class 多用Singleton=================一看就是业余选手。设计模式不是拿来到处撒的。不要为了使用模式而使用模式。采用static可以减少一些函数呼叫的开销,但是多数情况下不是十分要命的一件事情。使用ReSharper之类的IDE插件的话,会自动提示那些方法可以设为static,十分方便。 多用Singleton 是相对于使用静态的object来说的, Singleton 是离不开static的.lextm 知道你是专业选手. 测试代码private static void StaticProc(){ for (int i = 0; i < 10000; i++) ;}private void UnstaticProc(){ for (int i = 0; i < 10000; i++) ;}private void button1_Click(object sender, EventArgs e){ long vTickCount = Environment.TickCount; for (int j = 0; j < 1000; j++) UnstaticProc(); Console.WriteLine("非静态方法耗时:{0}毫秒", vTickCount); vTickCount = Environment.TickCount; for (int j = 0; j < 1000; j++) StaticProc(); Console.WriteLine("静态方法耗时:{0}毫秒", vTickCount); vTickCount = Environment.TickCount; for (int j = 0; j < 1000; j++) UnstaticProc(); Console.WriteLine("非静态方法耗时:{0}毫秒", vTickCount); vTickCount = Environment.TickCount; for (int j = 0; j < 1000; j++) StaticProc(); Console.WriteLine("静态方法耗时:{0}毫秒", vTickCount); vTickCount = Environment.TickCount; for (int j = 0; j < 1000; j++) UnstaticProc(); Console.WriteLine("非静态方法耗时:{0}毫秒", vTickCount); vTickCount = Environment.TickCount; for (int j = 0; j < 1000; j++) StaticProc(); Console.WriteLine("静态方法耗时:{0}毫秒", vTickCount); vTickCount = Environment.TickCount; for (int j = 0; j < 1000; j++) UnstaticProc(); Console.WriteLine("非静态方法耗时:{0}毫秒", vTickCount); vTickCount = Environment.TickCount; for (int j = 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 =============when use Singleton,u also need static method or field...when u know 'static' mean what then u will know when u should use 'static' ◆带变量的通配符如何写法◆ c#中 datagridview 设置单元格颜色怎样才能及时更新 datagridview的分页功能 writeXml的问题 救命阿!控件AxWebBrowser中DocumentComplete为什么触发不了?? 很不错的电子书籍网站 await和.Wait()有什么区别吗? 自定义控件的一些疑问 DEV GridControl嵌套问题(WinForm程序) 求C#语言参考手册(中文版的)急需!!! 在Asp.net中怎么才能弹出保存对话框? c# 下拉菜单问题
=================
一看就是业余选手。设计模式不是拿来到处撒的。不要为了使用模式而使用模式。采用static可以减少一些函数呼叫的开销,但是多数情况下不是十分要命的一件事情。使用ReSharper之类的IDE插件的话,会自动提示那些方法可以设为static,十分方便。
lextm 知道你是专业选手.
private static void StaticProc()
{
for (int i = 0; i < 10000; i++) ;
}private void UnstaticProc()
{
for (int i = 0; i < 10000; i++) ;
}private void button1_Click(object sender, EventArgs e)
{
long vTickCount = Environment.TickCount;
for (int j = 0; j < 1000; j++)
UnstaticProc();
Console.WriteLine("非静态方法耗时:{0}毫秒", vTickCount);
vTickCount = Environment.TickCount;
for (int j = 0; j < 1000; j++)
StaticProc();
Console.WriteLine("静态方法耗时:{0}毫秒", vTickCount);
vTickCount = Environment.TickCount;
for (int j = 0; j < 1000; j++)
UnstaticProc();
Console.WriteLine("非静态方法耗时:{0}毫秒", vTickCount);
vTickCount = Environment.TickCount;
for (int j = 0; j < 1000; j++)
StaticProc();
Console.WriteLine("静态方法耗时:{0}毫秒", vTickCount);
vTickCount = Environment.TickCount;
for (int j = 0; j < 1000; j++)
UnstaticProc();
Console.WriteLine("非静态方法耗时:{0}毫秒", vTickCount);
vTickCount = Environment.TickCount;
for (int j = 0; j < 1000; j++)
StaticProc();
Console.WriteLine("静态方法耗时:{0}毫秒", vTickCount);
vTickCount = Environment.TickCount;
for (int j = 0; j < 1000; j++)
UnstaticProc();
Console.WriteLine("非静态方法耗时:{0}毫秒", vTickCount);
vTickCount = Environment.TickCount;
for (int j = 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]最后:
楼主要搞清楚静态方法和非静态方法的区别--静态方法是通过类本身调用,而非静态方法必须通过类实例来调用。
可以在非静态元素中访问静态元素
但不能在静态元素中访问非静态元素
when u know 'static' mean what then u will know when u should use 'static'