Вопрос по memory-management, static, c#, console-application – Должен ли я пойти со статическими методами или нестатическими методами?
Я создал консольное приложение в 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
}
}
следует ли использовать статические поля / методы, основанные на потреблении памяти (которые, вероятно, не будут сильно изменены). Вместо этого вы должны идти с тем, что производит более чистый, более тестируемый код.
статическийmethods все в порядке (IMO), если вам не нужно какое-либо полиморфное поведение, и если метод не логически воздействует на экземпляр типа. Однако, если выalso включенные статические переменные, это больше проблемы. Статические переменные - кроме констант - могут значительно затруднить тестирование, повторное использование и обработку кода в нескольких потоках.
Похоже, вы, вероятно,should использовать переменные экземпляра и методы. Просто сделай свойMain
Метод создает экземпляр класса, и он может использовать этот экземпляр для создания делегатов для передачи в таймер. Трудно быть гораздо более точным, чем это, не зная больше о том, что вы делаете, но похоже, что вы используете статику для немедленного удобства, а не потому, что это правильно, что всегда беспокоиться.