2016-12-24 1 views
-1

自分の時間が何かのときにスケジュールされたタスクのデータベースをチェックする必要があります。C#のコンソールアプリケーションで永遠のWHILEループ内のすべてのオブジェクトを廃棄する方法

しかし、(他の機能を呼び出さずに)実行すると、5分、70MBごとにハードドライブを占有します。これは正常ですか?どうすればこの問題を解決できますか?

static void Main(string[] args) 
{ 
    //dhpGroup_kukuEntities _efEntities = new dhpGroup_kukuEntities(); 
    while (true) 
    { 
      DateTime ServerNOW= DateTime.Now; 

      using (dhpGroup_kukuEntities _efEntities = new dhpGroup_kukuEntities()) 
      { 
       List<Schedual_JSON> ListSchedual = new List<Schedual_JSON>(); 
       var a = 
        _efEntities.Schedual_JSON.Where(
         x => 
          x.SCHJS_DateTimeSchedual.Value.Year == ServerNOW.Year && 
          x.SCHJS_DateTimeSchedual.Value.Month == ServerNOW.Month && 
          x.SCHJS_DateTimeSchedual.Value.Day == ServerNOW.Day && 
          x.SCHJS_DateTimeSchedual.Value.Hour == ServerNOW.Hour && 
          x.SCHJS_DateTimeSchedual.Value.Minute == ServerNOW.Minute && 
          x.SCHHS_SendToThread == false).ToList(); 

       if (a.Count > 0) 
       { 
        for (int i = 0; i < a.Count; i++) 
        { 
         Console.WriteLine("One Task Found!"); 
        } 

        ThreadPool.QueueUserWorkItem(o => GetSchedualList(a)); 

        foreach (var VARIABLE in a) 
        { 
         Console.WriteLine("One Scudule Regarding to User({0}) With {1} Channel(s) and {2} files Run to BasicThread", _efEntities.AspNetUsers.FirstOrDefault(x => x.Id == VARIABLE.SCHJS_UserID).UserName, getChannelCount(VARIABLE), getFileCount(VARIABLE)); 
         VARIABLE.SCHHS_SendToThread = true; 
        } 

        _efEntities.SaveChanges(); 
       } 
      } 

      System.GC.Collect(); 
     } 
} 

答えて

1

usingスコープはよくそれをしません。 使い捨てインタフェースからインスタンス化されたすべてのオブジェクトは、スコープの末尾のusingステートメントでインスタンス化されたときに破棄されます。 他に何もする必要はありません。

+0

ありがとうございました。しかし、私は自分のエンティティにスコープを使用していました。これはdispose_efEntitiesオブジェクトかもしれませんが、datetimeやlist <>のようなものはメモリに残っていて、問題を解決できません –

+0

ガベージコレクタは使用されていないすべてのオブジェクトを処分するため重要ではありません。 –

関連する問題