私はIIS7.5を持っています。現在、私たちのウェブサイトのエンティティには加重評価があります。加重評価の計算は非常に遅く、ホームページの読み込みに 10 秒以上かかるほどです。
これを解決するには、重み付けを各エンティティと共にデータベースに保存し、IIS で重み付けを再計算するスクリプトを 5 ~ 10 分ごとに実行します。
どうすればこれを行うことができますか?ウェブページの URL を実行するのが最も簡単でしょう。
Cache
これには、10 分後に有効期限が切れるように設定されたエントリを使用できます。
アイテムを追加するときは、CacheItemRemovedCallback
パラメーターにコールバック関数を使用します。このコールバック関数では、データベースの作業を行い、期限切れのキャッシュ エントリを再度追加します。
その他のオプションは次のとおりです。
Windows サービスおよびスケジュール タスクでは、IIS に結果を伝える何らかの方法が必要です。
1 つの方法は、Web URL を呼び出すのではなく、Windows サービスを使用することです。
これは、計算を実行するためにバックグラウンドで完全に帯域外で実行できます。詳細はこちら:
http://msdn.microsoft.com/en-us/library/d56de412%28v=VS.100%29.aspx
いくつかの利点は次のとおりです。
ただし、サービスをインストールして実行するには、サーバーへの十分なフル アクセスが必要です。
クライアントを使用せず、サーバーのみがこの関数を継続的に呼び出すには、サーバー上にスレッドを作成して、それを計算する関数を呼び出すことができます。
スレッドまたはタイマーを開始するより良い方法は、次のサンプルのように Global.asax にあります。
public class Global : System.Web.HttpApplication
{
private Timer _timer;
void Application_Start(object sender, EventArgs e)
{
int period = 1000 * 60 * 10; // 10 minutes
_timer = new Timer(TimerCallback, null, 1000, period);
}
private void TimerCallback(object state)
{
// Do your stuff here
}
}
}
以前にこのようなことをしたことがあり、Windows のスケジュールされたタスクを使用して、特定の時間間隔でスクリプトを呼び出していました。
WGET などを使用した単純なバッチ ファイルと、スケジュールされたタスクの助けを借りて実行できます。
http://www.gnu.org/software/wget/
このアイデアをテストするためにこれを試すことができます:
wget http://localhost/filename.ashx