我应该使用静态方法还是非静态方法?

时间:2012-06-14 06:05:21

标签: c# memory-management static console-application

我在C#中创建了一个控制台应用程序,并且有 main 方法(静态),我的要求是初始化2个定时器并分别处理2个方法,这些方法将定期调用以执行某项任务。现在我已经将所有其他方法/变量设置为静态,因为它是从定时器处理程序事件调用的(由于从main调用它而是静态的)。

现在我想知道上面的情况如果这个控制台长时间运行会如何消耗内存?如果我想应用oops概念,那么我是否需要使所有方法/变量非静态并通过创建类的对象来访问它?在这种情况下如何消耗内存?

更新 以下是我的代码片段

 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
        }
    }

1 个答案:

答案 0 :(得分:6)

你不应该决定是否使用基于内存消耗的静态字段/方法(可能不会改变很多)。相反,你应该选择产生更干净,更可测试代码的东西。

如果您不需要任何类型的多态行为,并且该方法在逻辑上不对该类型的实例执行操作,那么

静态方法是可以的(IMO)。但是,如果你涉及静态变量,那就更成问题了。静态变量 - 除了常量之外 - 可以使代码在多个线程中更难以测试,重用和正确处理。

听起来你可能应该使用实例变量和方法。只需让你的Main方法创建一个类的实例,它就可以使用该实例创建委托以传递给计时器。如果不了解更多关于你正在做的事情的话,很难比这更精确,但听起来好像你正在使用静态来获得方便,而不是因为这是正确的事情,这总是令人担忧。