2012-03-28 16 views
1

Webアプリケーションで実行するのに時間がかかる機能があります。多くの時間を要する関数の処理スレッド化

私はこれをプロファイラとテストしました。

他の機能が同じページロードで実行されています。

それらの機能から、残りの値を表示し、スレッドでこの機能を維持し、それが終わるラベルに表示するための最良の方法は何ですか?

この関数は、時間がかかるアプリケーションのイベントを取得するために使用されます。

private void getEventErrors() 
    { 
     EventLog eventLog = new EventLog("Application", "."); 

     getEvents(eventLog.Entries); 
    } 

private void getEvents(EventLogEntryCollection eventLogEntryCollection) 
    { 
     int errorEvents = 0; 

     foreach (EventLogEntry logEntry in eventLogEntryCollection) 
     { 
      if (logEntry.Source.Equals("XYZ")) 
      { 
       DateTime variable = Convert.ToDateTime(logEntry.TimeWritten); 
       long eventTimeTicks = (variable.Ticks); 
       long eventTimeUTC = (eventTimeTicks - 621355968000000000)/10000000; 

       long presentDayTicks = DateTime.Now.Ticks; 
       long daysBackSeconds = ((presentDayTicks - 864000000000) - 621355968000000000)/10000000; 


       if (eventTimeUTC > daysBackSeconds) 
       { 
        if (logEntry.EntryType.ToString() == "Error") 
        { 
         errorEvents = errorEvents + 1; 
        }       
       } 
      } 
     } 
     btn_Link_Event_Errors_Val.Text = errorEvents.ToString(GUIUtility.TWO_DECIMAL_PT_FORMAT);    
     if (errorEvents == 0) 
     { 
      lbl_EventErrorColor.Attributes.Clear(); 
      lbl_EventErrorColor.Attributes.Add("class", "green"); 
     } 
     else 
     { 
      lbl_EventErrorColor.Attributes.Clear(); 
      lbl_EventErrorColor.Attributes.Add("class", "red"); 
     } 
    } 

私はpageloadイベントに3つの関数を持ち、2つはDBから値を取得し、もう1つは上に示しています。

これらの機能を両方ともサービスコールにする必要がありますか?

私が望んでいたのは、ページが高速に読み込まれ、多くの時間がかかる機能がある場合は、バックグラウンドで実行し、完了したときに表示し、ユーザーが新しいページに移動したい場合それを殺して移動しなければならない。

+1

それを所属するサービスに移動してAJAXコールを行うのはどうですか? –

+0

サービスに移動する..?申し訳ありませんが、私はこれに新しいので、あなたはより明確になることができます。私はまだAJAXの実装を開始していません。例が非常に役に立つでしょう。 Thnaks – user175084

答えて

2

あなたはASP.NETでの別のスレッドで実行されている機能を持っている場合は、サービスに移動することを検討してください。この

は、ASP.NETで長い実行中のタスクを実行することは常に良いアイデアではない理由のためにthis答え(SO上で多くの1)を参照してくださいするために多くの理由があります。

サービスの1つのオプションは、WCFを使用することです。あなたはhereを始めることができます。あなたのサービスは、あなたのイベントをプルするために使用できる方法、例えばGetEvents()を実装することができます。そうすれば、このプロセスが完了するのを待っているあなたのページを縛ることはありません(AJAXを使ってください)。また、これにより、お客様のウェブサイトでコードに触れることなくGetEvents()の実装を変更することができます。

+0

しかし、サービスの方法を呼び出すには等しい時間がかかります。 – Pankaj

+0

pageloadイベントには3つの関数があり、2つはDBから値を取得し、もう1つは上に示します。これらの機能の両方をサービスコールにする必要があります。私が望んでいたのは、ページが高速に読み込まれ、時間がかかる機能があれば、バックグラウンドで実行し、完了したら表示する必要があります。このプロセスでは、ユーザーが新しいページに移動したい場合は、そのページを削除して移動する必要があります。 – user175084

+0

ロギング要求をサービスに移動することを検討する必要があります。また、少量のエントリを取得するためのページングまたはメカニズムの種類を検討することもできます。あなたは本当にそれらをすべて同時に見る必要がありますか? –

関連する問題