2012-06-14 159 views
2

我在C#中創建了一個控制檯應用程序,並且有main方法(靜態),我的要求是分別初始化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 
     } 
    } 
+0

不要把你的東西放在主。一般情況下避免靜態,除非你真的真的必須這樣做。這是一個不好的做法。 – SimpleVar

回答

6

你不應該在決定是否使用基於內存消耗靜態字段/方法(這可能不會改變太多)。相反,你應該選擇那些產生更清潔,更易測試的代碼。

靜態方法沒問題(IMO)如果您不需要任何種類的多態行爲,並且該方法不在邏輯上作用於該類型的實例。但是,如果你有有涉及靜態變量,那更是一個問題。靜態變量 - 除了常量 - 可以使代碼更加難以在多個線程中正確地測試,重用和處理。

這聽起來像你可能應該使用實例變量和方法。只需讓你的Main方法創建一個類的實例,並且它可以使用該實例創建委託以傳遞給定時器。如果不瞭解更多關於你在做什麼的事情,很難做得更精確,但聽起來好像你正在使用靜力學來獲得即時的便利,而不是因爲這是正確的事情,這總是令人擔憂的。

+0

感謝您的回答。我在我的更新問題中加入了我的代碼片段。 –

+0

@ArunRana:好的,那對我來說肯定不是靜態的。 –

相關問題