0

ASP.NETWebアプリケーションに必要な非常に大量のデータの最初のバッチがあります。これまで(実際には2年間!)、Page_Loadで実行したり、ViewStateまたはSessionに保存したりすることができないほどコストのかかるものは何もありませんでした。しかし今、私はかなり静的なままで(最大で1日1回更新される)オブジェクトのリストが必要であり、約5000個のオブジェクトが含まれています。Pag​​e_Loadで毎回ビルドすると、ロード時間が明らかにヒットします。

キャッシングに関するいくつかのグーグルは、のようなものを使用したいくつかの非常に基本的な例を示していますCache["myStuff"] = myObject;、そしてそれはすべてうまくいっています。ただし、アプリケーションがアクセスされているか使用されているかに関係なく、特定の時間に更新を実行するようにWebアプリケーションを設定できる方法があるかどうかを知りたいです。

たとえば、このプロセスでリストを更新して、誰も何も使用していない午前4時のように1日1回実行するようにします。たとえば、午後の1日目に、Page_Loadはキャッシュされたオブジェクトを取得するようにチェックしますが、nullに戻るため、その場合は、弾丸をかみ、1日目の残りのリストをリクエスト/ビルドして、キャッシュに保存します。 。1日目の残りの期間中、オブジェクトはキャッシュ内にあり、まだ有効であるため、誰もオブジェクトを作成する必要はありません。

1日目が終了し、2日目は午前4時です。誰もページを使用していません。1日目からキャッシュに保存されていたオブジェクトを削除して再構築し、午前中にオフィスに到着したときに、最初にページにアクセスした人が今日のリストを作成する必要がないようにします。すでに完了しています。

私が持っている唯一のアイデアは、Windowsのスケジュールされたタスクなどで実行されるコンソールアプリケーションの作成を検討することです。しかし、それでも、そのような外部アプリケーションからASP.NETWebアプリケーションとどのように対話できるかはわかりません。

うまくいけば、私は理にかなっています。私が達成したいことは可能でさえありますか?

4

3 に答える 3

3

If you use a distributed cache like MemCached, you could create a Windows Service or Console application for populating the cache. Since both applications (The service and the web app) will use the same cache, it will solve your problem.

Another solution is to have a page just for that (i.e. /startcache.aspx) that will do the cachin on page_load. And you can schedule a request to that page. You could also hide the page from outside the web-app using some kind of firewall (so nobody accesses that page!). Finally, the good part of this solution is that you can reuse your current code, as it will work in the same project.

Hope it helps.

于 2012-10-31T01:18:24.857 に答える
2

Redisは、アウトプロセスのサードパーティのキャッシュ/キー値ストアのもう1つのオプションです。

于 2012-10-31T01:20:26.597 に答える
0

サーバーとバックエンドの負荷を軽減し、すべての毎日のデータを提供するため(質問から理解できるように)

データファイル(CSV、XML、JSON)を作成し、それをデータポイントとして提供してみませんか。

あなたの質問から、クライアント(アプリケーション)はそのデータセットに対して独自のクエリを実行できるようです。

そのようなファイルの作成は、固定された時間セットで実行し、保存することができます。サードパーティのソリューションを含める必要はありません(それらの立派な品質に加えて)

于 2012-10-31T01:43:23.167 に答える