方法调用频繁的话,采用Static性能可能会更加好些.

解决方案 »

  1.   

    采用Static是相对于频繁调用而建立的静态机制,此机制在程序运行开始到结束始终存在于内存当中,若不使用Static则每次需要调用类的时候则需要new一次,但new一次的性能相对于内存较低的用户来说是可行的,则对于程序而言没用任何影响,只是方便程序员进行编码工作。
      

  2.   

    跟你说这话的人是蔡鸟,static 会降低程序灵活性, 多用singleton, interface and abstract class
      

  3.   

    多用Singleton
    =================
    一看就是业余选手。设计模式不是拿来到处撒的。不要为了使用模式而使用模式。采用static可以减少一些函数呼叫的开销,但是多数情况下不是十分要命的一件事情。使用ReSharper之类的IDE插件的话,会自动提示那些方法可以设为static,十分方便。
      

  4.   

    多用Singleton 是相对于使用静态的object来说的, Singleton 是离不开static的.
    lextm 知道你是专业选手.
      

  5.   

    测试代码
    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]最后:
    楼主要搞清楚静态方法和非静态方法的区别--静态方法是通过类本身调用,而非静态方法必须通过类实例来调用。
    可以在非静态元素中访问静态元素
    但不能在静态元素中访问非静态元素
      

  6.   

    多用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'