1

値をキャッシュに保存し、それを取得して処理時間を改善しようとしています。キャッシュ アイテムを取得したら、値を計算する必要があります。しかし、問題は、キャッシュに保存した元の値が返されないことです。その代わりに、キャッシュから取得した後に計算した最新の値を提供しています。

以下を使用して問題をシミュレートしました。初めて「abc123」をキャッシュに保存しました。次に、「def」に変更しました。しかし、戻ってくると、「abc123」ではなく「def」と表示されます。そんなはずじゃないの?それとも間違っているのは私ですか?ありがとう。

protected void Page_Load(object sender, EventArgs e)
{
    MyObj abc = (MyObj)Cache["myCache"];


    if (abc != null)
    {
        Response.Write(abc.MyText);
        Response.End();
        return;
    }        

    Response.Write(abc);        

    abc = new MyObj() { MyText = "abc123" };

    Cache.Insert("myCache", abc, null, DateTime.Now.AddMinutes(1), TimeSpan.Zero);

    abc.MyText = "def";
}

class MyObj
{
    public string MyText { get; set; }
}
4

1 に答える 1

1

キャッシュ内にある同じオブジェクト (参照) を編集しています。この動作を望まない場合は、オブジェクトをキャッシュに入れる前に複製する必要があります。

于 2013-03-06T11:33:53.780 に答える