0

1 分後に有効期限が切れるキャッシュがあるとします。

Cache.Insert("tryin", 0, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);

5 秒ごとに、キャッシュ velue を 1 ずつ増やすタイマーがありますが、ここで問題が発生します。次の構文を使用してキャッシュの値を更新すると、

Cache["tryin"] = Convert.ToInt16(Cache["tryin"]) + 1;

キャッシュを上書きし、NoSlidingExpiration と NoAbsoluteExpiration で Cache["tryin"] を作成しますが、そのキャッシュは 1 分後に期限切れになるようにします。また、次の構文を使用しようとしましたが、

Cache.Insert("tryin", Convert.ToInt16(Cache["tryin"]) + 1, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);

しかし、この場合、5 秒ごとに 1 分後に有効期限が切れるキャッシュを作成することになるため、有効期限が切れることはありません。

したがって、キャッシュの有効期限を変更せずにキャッシュ値を更新する方法、またはキャッシュの残りの有効期限を取得して、残りの有効期限に基づいて別のものを作成できる方法を探しています。

4

1 に答える 1

2

ここでの問題は、キャッシュされたアイテムが値型であることにあると思います。整数をクラスにラップできます。

public class ValueHolder
{
  public int Value = 0;
}

Cache.Insert("tryin", new ValueHolder(){Value = 0}, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration);

それから

ValueHolder vh = (ValueHolder)Cache["tryin"];
if (vh != null)
  vh.Value = vh.Value + 1;
于 2012-12-17T03:30:44.673 に答える