2

我在 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
        }
    }
4

1 回答 1

7

您不应该根据内存消耗来决定是否使用静态字段/方法(这可能不会有太大改变)。相反,您应该使用产生更清洁、更可测试的代码的方法。

如果您不需要任何类型的多态行为,并且该方法在逻辑上不作用于该类型的实例,则静态方法是可以的(IMO)。但是,如果您涉及静态变量,那就更成问题了。静态变量——除了常量——会使代码更难在多个线程中测试、重用和正确处理。

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

于 2012-06-14T06:11:24.073 回答