2

私は C# でコンソール アプリケーションを作成しました。メインメソッド (静的) があり、2 つのタイマーを初期化し、2 つのメソッドをそれぞれ処理する必要があります。これらのメソッドは、何らかのタスクを実行するために定期的に呼び出されます。ここで、他のすべてのメソッド/変数を静的にしました。これは、タイマー ハンドラー イベントから呼び出しているためです (メインから呼び出すため静的です)。

上記のシナリオで、このコンソールが長時間実行されている場合にメモリがどのように消費されるかを知りたいですか? おっとコンセプトを適用したい場合は、すべてのメソッド/変数を非静的にし、クラスのオブジェクトを作成してアクセスする必要がありますか? この場合、メモリはどのように消費されますか?

更新: 以下は私のコードのスニペットです

 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 に答える