私は、C#で特定のアイテムをあらかじめ定義した時間キャッシュしたい(1時間と言う)コンソールアプリケーションを作成しています。このキャッシュに追加されたアイテムは、期限が切れた後に自動的に削除されます。私が使用できるビルトインのデータ構造はありますか?これはコンソールアプリで、ウェブアプリではないことを忘れないでください。C#アイテムの有効期限が切れたコレクション
答えて
私はこれを行うBCLのどのオブジェクトも知りませんが、私はこれまでに同様のことを書いています。
キャッシングクラスの内部にSystem.Threading.Timer(web/winformsの依存関係なし)を含め、オブジェクトに有効期限(または最後に使用された)時間を格納するだけで、これを簡単に行うことができます。数分ごとにタイマーのチェックを行い、期限切れにするオブジェクトを削除してください。
ただし、あなたのオブジェクトのイベントを注意してください。私はこのようなシステムを持っていて、キャッシュ内のオブジェクトのイベントからの退会を非常に慎重にしていませんでした。これはデバッグするのが非常に難しい場合があります。
実際にキャッシュから削除する必要がありますか?または、そのアイテムのキャッシュへの将来の要求は、指定された時間の後にnullを返す必要がありますか?
これを行うには、定期的にキャッシュをパージしていた何らかのバックグラウンドスレッドが必要です。これは、あなたがメモリ消費などを心配していた場合にのみ必要となります。データを期限切れにしたいだけなら、簡単に行うことができます。
このようなクラスを作成するのは簡単です。
class CachedObject<TValue>
{
DateTime Date{get;set;}
TimeSpan Duration{get;set;}
TValue Cached{get;set;}
}
class Cache : Dictionary<TKey,TValue>
{
public new TValue this(TKey key)
{
get{
if (ContainsKey(key))
{
var val = base.this[key];
//compare dates
//if expired, remove from cache, return null
//else return the cached item.
}
}
set{//create new CachedObject, set date and timespan, set value, add to dictionary}
}
は、あなたが(あなたの本当のオブジェクトの周りに、おそらくラッパー)をキャッシュし、そのコンストラクタで時間で期限切れになるように設定されるオブジェクトで、ExpirationDateとプロパティを含めます。コレクションからアイテムを削除する代わりに、期限切れのアイテムを除外する方法でコレクションにアクセスします。または、これを自動的に行うカスタムコレクションを作成します。実際にキャッシュからアイテムを削除する必要がある場合、カスタムコレクションはそのメンバーのいずれかの呼び出しごとに期限切れのアイテムをパージすることができます。
すでにBCLにあります。その場所を見つけようと思っている場所ではありません。ASP.NETだけでなく、他の種類のアプリケーションからSystem.Web.Cachingを使用することもできます。
This search on google links to several resources about this.
- 1. 「トークンの有効期限が切れて」
- 2. メッセージの有効期限が切れた後のサービスバス
- 3. アドホック証明書の有効期限が切れた問題
- 4. フォーム提出時にセッションの有効期限が切れた
- 5. symfonyセッションの有効期限が切れた後にログインページにリダイレクト
- 6. 春MVCでセッションの有効期限が切れた
- 7. Oracle 10gセッションの最大有効期限が切れました
- 8. Ruby Net :: HTTP実行の有効期限が切れました
- 9. システムユーザパスワードの有効期限が切れました
- 10. Visual Studioライセンスのダウンロード後に有効期限が切れた
- 11. iOSプロビジョニングプロファイルの有効期限が切れた
- 12. django-compressor、heroku、s3:リクエストの有効期限が切れました
- 13. TIdHTTP - Delphi XEでセッションの有効期限が切れたメッセージ
- 14. sfGuardUser - セッションの有効期限が切れました
- 15. ブラウザでWebページの有効期限が切れたメッセージ
- 16. JSF/a4jマッシュアップ - ビューステートIDの有効期限が切れました
- 17. 仮想時間の有効期限が切れました
- 18. 有効期限が切れたAutologinの処理
- 19. アセンブリ署名鍵の有効期限が切れました
- 20. Google Recaptcha V2の有効期限が切れた後
- 21. 要素の有効期限が切れたときにシグナル機能を使用したマップの期限切れ
- 22. ローカライズされたASP.NETリソースの有効期限切れ
- 23. ユーザー、oauth_token、有効期限が切れるが、Facebookのからsigned_request
- 24. AWS S3のアップロード。無効なポリシー:ポリシーの有効期限が切れました
- 25. Googleアナリティクスのクロスドメイン:リンカーパラメータのハッシュが無効または有効期限切れ
- 26. C#HttpListener有効期限が設定されていてもセッション後にCookieが期限切れになる
- 27. 複数のアプリケーションサーバーでレールページキャッシュの有効期限が切れる
- 28. 私のシナリオでセッションの有効期限が切れますか?
- 29. テストアプリのプロビジョニングプロファイルの有効期限が切れていない
- 30. ASP.Net MVCでヘッダの有効期限が切れる
見る代わりにhttp://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache(v=vs.100).aspx MemoryCacheを使用します。http:// stackoverflowの.com/a/793720/303290 tl; dr: "CacheオブジェクトがASP.NET以外で使用されている場合、Cacheオブジェクト用に予約されているシステムメモリは解放されません" – mbx