gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:05:39 25 4
gpt4 key购买 nike

我在 C# 中创建了一个控制台应用程序,并且有 ma​​in 方法(静态),我的要求是初始化 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
}
}

最佳答案

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

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

听起来您可能应该使用实例变量和方法。只需让您的 Main 方法创建该类的一个实例,它就可以使用该实例创建委托(delegate)以传递给计时器。在不了解自己正在做的事情的情况下很难比这更精确,但听起来确实像是为了即时方便而不是因为它是正确的事情而使用静力学,这总是令人担忧。

关于c# - 我应该使用静态方法还是非静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11027540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com