我应该用静态方法和非静态方法去吗?(Should I go with static methods

2019-06-25 11:35发布

我已经创造了C#控制台应用程序而存在的主要方法(静态),我的要求是初始化2个定时器和处理2种方法分别将被定期调用做一些任务。 现在,我已经采取了所有其他方法/变量静态的,因为这是由定时器处理事件(因从主要调用它是静态的)调用。

现在我想知道上面的场景记忆是怎么回事,如果这台运行了很长一段时间被消耗? 如果我想申请哎呀概念,然后我需要做的所有方法/变量非静态和访问,通过创建类的对象? 在这种情况下,内存怎么会被消耗?

更新:以下是我的代码片段

 public class Program
    {
        readonly static Timer timer = new Timer();
        static DateTime currentDateTime;
        //other static variables
        //-----
        static void Main()
        {
            timer.Interval = 1000 * 5;
            timer.AutoReset = true;
            timer.Enabled = true;
            timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
            timer.Start();

            //2nd timer
            //-----

            System.Console.ReadKey();
            timer.Stop();
        }

        static void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            currentDateTime = DateTime.UtcNow;
            PushData();

        }

        private static void PushData()
        {
            //Code to push data
        }
    }

Answer 1:

你不应该在决定是否使用静态字段基于内存的消耗(这可能不会改变太多)/方法。 相反,你应该用什么生产更清洁,更可测试的代码去。

静态方法是好的(IMO),如果你不需要任何形式的多态行为,如果方法不逻辑的类型的实例行为。 但是,如果你得到过静态变量参与其中,这是更大的问题。 静态变量 - 不是常量等 - 可以使代码更难测试,再利用,并在多个线程正确处理。

这听起来像你应该使用实例变量和方法。 只是让你Main方法创建类的实例,它可以使用该实例来创建委托传递给计时器。 很难比这更精确,而不更多地了解你在做什么,但它听起来像你正在使用静态立即方便,而不是因为它是做正确的事,这始终是一个隐忧。



文章来源: Should I go with static methods or non static methods?