Вопрос по memory-management, static, c#, console-application – Должен ли я пойти со статическими методами или нестатическими методами?

2

Я создал консольное приложение в C # и естьmain Метод (статический) и мое требование - инициализировать 2 таймера и обрабатывать 2 метода соответственно, которые будут периодически вызываться для выполнения некоторой задачи. Теперь я взял все другие методы / переменные статическими, потому что они вызывают из событий обработчика таймера (которые являются статическими из-за вызова его из main).

Теперь я хотел бы знать для приведенного выше сценария, как будет использоваться память, если эта консоль будет работать в течение длительного времени? если я хотел бы применить концепцию упс, тогда мне нужно сделать все методы / переменные не статичными и получить к нему доступ, создав объект класса? в этом случае, как будет использоваться память?

Update: Ниже приведен фрагмент моего кода

 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. Избегайте статического в целом, если вы действительно действительно действительно должны. Это плохая практика. SimpleVar

Ваш Ответ

1   ответ
6

следует ли использовать статические поля / методы, основанные на потреблении памяти (которые, вероятно, не будут сильно изменены). Вместо этого вы должны идти с тем, что производит более чистый, более тестируемый код.

статическийmethods все в порядке (IMO), если вам не нужно какое-либо полиморфное поведение, и если метод не логически воздействует на экземпляр типа. Однако, если выalso включенные статические переменные, это больше проблемы. Статические переменные - кроме констант - могут значительно затруднить тестирование, повторное использование и обработку кода в нескольких потоках.

Похоже, вы, вероятно,should использовать переменные экземпляра и методы. Просто сделай свойMain Метод создает экземпляр класса, и он может использовать этот экземпляр для создания делегатов для передачи в таймер. Трудно быть гораздо более точным, чем это, не зная больше о том, что вы делаете, но похоже, что вы используете статику для немедленного удобства, а не потому, что это правильно, что всегда беспокоиться.

Спасибо за Ваш ответ. Я добавил фрагмент моего кода в мой обновленный вопрос. Arun Rana
@ArunRana: Хорошо, мне кажется, что это не должно быть статичным.

Похожие вопросы