我可以在这里使用静态吗?

时间:2015-08-20 20:47:16

标签: c# multithreading timer static

我已经阅读了关于静态的专业/缺点但我不确定如何从性能的角度来看我的情况。

我有classA个不同的变量以及函数计时器

class ClassA
{
    // More vars...
    private System.Timers.Timer _values;
    public ClassA(IntPtr handle, String t)
    {
        _handle = handle;
        _title = t;
        CheckRoutineAndContinue();     
    }

CheckRoutineAndContinue是这样的:

    private void CheckRoutineAndContinue()
    {
        _values= new System.Timers.Timer();
        _values.Elapsed += delegate { Check(); };
        _values.Interval = 200;
        _values.AutoReset = false;
        _values.Start();
    }

    private void Check()
    {
        if (_max> 5) StopCheck();
        else
        {
            // Logic...
        _max++;
    }

    private void StopCheck()
    {
        if (_values!= null)
        {
            _values.AutoReset = false;
            _values.Enabled = false;
            _values.Stop();
        }
    }

我的问题是:我将有多个ClassA对象。如果我为CheckRoutineAndContinue()创建静态方法,它只会被创建一次,我可以传递我需要使用的参数,而如果我在我的类中有它,我不需要发送ClassA的变量并且只会创建一次。所有ClassA对象执行的代码都是相同的,但每个对象在变量中都有不同的值。

这是一个很好的机会来创建一个静态方法并通过参数以某种方式传递所有变量,所以这些函数只创建一个,或者建议将这些函数放在同一个类中,即使它们将被创建每次我创建一个新的ClassA对象?

假设在这种情况下测试没什么大不了的。

我认为静态方法更好,因为每次都会再次创建函数,但我不是100%加上我不确定静态方法是否可以正确处理定时器,因为我需要根据需要启动它关于计时器内部功能的逻辑。

1 个答案:

答案 0 :(得分:4)

我不认为在这里使用静态有什么好处。我并不同意你的表现会得到改善;你仍然会做同样的事情。

通常,静态使用有两个原因:(1)您希望某些东西成为单个对象(例如,整个应用程序共享的某些数据的位置;或者(2)所涉及的方法不会改变任何状态类的,因此标记为静态,因为这有点优化了内存中类实例的创建(以非常小的方式)。