【问题标题】:Should I go with static methods or non static methods?我应该使用静态方法还是非静态方法?
【发布时间】:2012-06-17 03:47:42
【问题描述】:

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

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

更新: 以下是我的代码的 sn-p

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

【问题讨论】:

  • 不要把你的东西放在 Main。一般避免静态,除非你真的真的真的必须这样做。这是一种不好的做法。

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


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答。我已将我的代码的 sn-p 放入更新的问题中。
  • @ArunRana:好的,这在我看来当然不应该是静态的。
猜你喜欢
  • 1970-01-01
  • 2014-05-24
  • 2015-11-25
  • 2011-02-01
  • 2021-04-05
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多