C# 我在这里用静电还是不用静电?

C# 我在这里用静电还是不用静电?,c#,multithreading,timer,static,C#,Multithreading,Timer,Static,我读过关于静态的赞成/反对意见,但从性能的角度来看,我不确定如何在我的案例中做到这一点 我有一个classA,具有不同的变量,还具有计时器功能: 其中检查路线并继续是: private void CheckRoutineAndContinue() { _values= new System.Timers.Timer(); _values.Elapsed += delegate { Check(); }; _values.Interv

我读过关于静态的赞成/反对意见,但从性能的角度来看,我不确定如何在我的案例中做到这一点

我有一个
classA
,具有不同的变量,还具有计时器功能:

其中
检查路线并继续
是:

    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)您希望某个对象是单例对象(例如,整个应用程序共享的某些数据的位置);或者(2)所涉及的方法不会改变类的任何状态,因此标记为静态,因为这在某种程度上优化了在内存中创建类实例的过程(以一种非常次要的方式)。

我看不出在这里使用static有什么真正的好处。我不同意您的性能会得到提高;您仍然会做同样的事情


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

如果使用静态函数,它可能确实(稍微)快一点,但会丢失对类成员变量的访问。在大多数情况下,这将是一个严重的OOP冲突。如果使用“哪个更快”性能问题,得到正确答案的方法是测试这两种方法。@Blorgbeard好吧,我也想知道什么是“正确的方法”。但是,是的,你的答案也是正确的。@PhillipH:哦,我的错,是的,你也可以访问私有成员。但是,这仍然会导致非常尴尬的编程。如果你使用static函数,它可能确实(稍微)快一点,但您将失去对类成员变量的访问。在大多数情况下,这将是一个很大的OOP冲突。如果您有一个“哪个更快”性能问题,得到正确答案的方法是测试这两种方法。@Blorgbeard好吧,我也想知道什么是做这件事的“正确方法”。但是是的,你的答案也是正确的。@PhillipH:哦,我的错,是的,你也可以访问私人成员。但是,这仍然会导致非常尴尬的编程。
我不知道gree您的性能将得到改善
:在OP需要做一些额外工作的情况下可能是这样。但在一般静态函数中a(稍微[即,这里对OP无效])更快。请参见我喜欢您的定义。对于单例对象,这一点非常清楚。对于(2),我假设静态的方法不需要对类信息(变量等)进行任何操作,只需要调用它(可能有参数,但仅此而已,从那时起,它将在不与类交互的情况下自行继续。我做对了吗?非常感谢!J.D.是的,静态方法没有“this”指针,无法修改类实例的状态。我认为,当您使用此类方法时,出于文档目的将其标记为静态是一种良好的做法。
我不同意您的性能会得到提高。
:在这种情况下,OP可能需要做一些额外的工作。但在一般静态函数中[即,这里对OP无效])更快。请看我喜欢您的定义。对于singleton对象,这一点非常清楚。对于(2),我假设静态方法是不需要对类信息(变量等)执行任何操作的方法,只需要调用它(可能有参数,但仅此而已,从那时起,它将在不与类交互的情况下自行继续。我做对了吗?非常感谢!J.D.是的,静态方法没有“this”指针,无法修改类实例的状态。我认为当您有这样的方法时,出于文档目的将它们标记为静态是一种很好的做法。
    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();
        }
    }