0

私はIIS7.5を持っています。現在、私たちのウェブサイトのエンティティには加重評価があります。加重評価の計算は非常に遅く、ホームページの読み込みに 10 秒以上かかるほどです。

これを解決するには、重み付けを各エンティティと共にデータベースに保存し、IIS で重み付けを再計算するスクリプトを 5 ~ 10 分ごとに実行します。

どうすればこれを行うことができますか?ウェブページの URL を実行するのが最も簡単でしょう。

4

5 に答える 5

3

Cacheこれには、10 分後に有効期限が切れるように設定されたエントリを使用できます。

アイテムを追加するときは、CacheItemRemovedCallbackパラメーターにコールバック関数を使用します。このコールバック関数では、データベースの作業を行い、期限切れのキャッシュ エントリを再度追加します。

その他のオプションは次のとおりです。

Windows サービスおよびスケジュール タスクでは、IIS に結果を伝える何らかの方法が必要です。

于 2011-12-29T18:28:48.317 に答える
3

1 つの方法は、Web URL を呼び出すのではなく、Windows サービスを使用することです。

これは、計算を実行するためにバックグラウンドで完全に帯域外で実行できます。詳細はこちら:

http://msdn.microsoft.com/en-us/library/d56de412%28v=VS.100%29.aspx

いくつかの利点は次のとおりです。

  • IIS プロセスは影響を受けないため、ユーザーの速度が低下することはありません
  • サービスは、Web サイトとは無関係に停止または開始できます。

ただし、サービスをインストールして実行するには、サーバーへの十分なフル アクセスが必要です。

于 2011-12-29T18:29:12.230 に答える
2

クライアントを使用せず、サーバーのみがこの関数を継続的に呼び出すには、サーバー上にスレッドを作成して、それを計算する関数を呼び出すことができます。

スレッドまたはタイマーを開始するより良い方法は、次のサンプルのように 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
    }
}

}

于 2011-12-29T18:32:09.030 に答える
0

以前にこのようなことをしたことがあり、Windows のスケジュールされたタスクを使用して、特定の時間間隔でスクリプトを呼び出していました。

于 2011-12-29T21:02:19.387 に答える
-1

WGET などを使用した単純なバッチ ファイルと、スケジュールされたタスクの助けを借りて実行できます。

http://www.gnu.org/software/wget/

このアイデアをテストするためにこれを試すことができます:

wget http://localhost/filename.ashx
于 2011-12-29T18:30:17.443 に答える