- PR -

ASP.NETのキャッシュについて

1
投稿者投稿内容
tm
会議室デビュー日: 2006/11/17
投稿数: 3
投稿日時: 2006-11-17 15:58
初めて投稿します。よろしくお願いします。

ASP.NET(VB.NET)
VisualStdio2005
.NET Framework 2.0
で開発を行っています

自作のオブジェクト(objData)をキャッシュに格納して、
プログラム内の任意の部分で値を取得したいと考えています。
ソースは抜粋すると以下のような感じです。

Private Sub Page_Load()
  If Not IsPostBack Then
    'objDataにデータを挿入しておく
    Cache.Insert("test", objData, Nothing,
              Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30))
    Call fncTest()
  End If
End Sub

Protected Sub Button1_Click()
  'objDataにデータを挿入しておく
  Cache.Insert("test", objData, Nothing,
            Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30))
End Sub

Protected Sub Button2_Click()
  Dim objTest As New clsData
  objTest = CType(Cache.Get("test"), clsData) ・・・@
End Sub

Private Sub fncTest()
  Dim objTest As New clsData
  objTest = CType(Cache.Get("test"), clsData) ・・・A
End Sub

objDataには何らかのデータが入っていてNothingではないとして、
@やAのタイミングで値を取得しようとすると、値が正常に取得できる時もあれば、Nothingで返る時もあります。
また、@ではButton2を1回クリックした時にNothingになる時もあれば、何回もクリックしているとNothingになる時もあります。

以前にVisualStdio2003 .NET Framework 1.1で同様の処理を行った時は、常に正常に返ってきていたし、
今回も取得できる時とできない時があるので混乱しています。

どなたかご教授お願いします。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2006-11-18 22:14
そもそもCacheは有効期限設定していても、確かメモリ不足時に消える可能性があったと記憶してます。よって原則として、
(1)Cacheから値を取り出す
(2)NothingだったらCacheを再構築する
という手順で利用するものだったのでは?(違ってたらごめんなさい)

#あと、@Aの直前の各行は New する必要ないけど。。。

tm
会議室デビュー日: 2006/11/17
投稿数: 3
投稿日時: 2006-11-20 10:25
回答ありがとうございます。

現在、各担当者が自分の端末のASP.NET開発サーバーorIIS経由で開発を行っていますが、
同じ処理を流しても、1度もNothingで返ってこない端末もあります。
これも単純にマシンスペックの違いということでしょうか。
やや釈然としませんが、本サーバーがやってくるのを待って再度検証してみようかと思います。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2006-11-20 13:42
さっき、通称「赤間本」を見てみましたが、Cacheについては上に書いたとおりだったので、実装がまずいと思います。.NET Framework1.1でうまく行ってたのはたまたまなのでは?

この本、相当イイ本ですので一読をおすすめします。
http://www.atmarkit.co.jp/fdotnet/entwebapp/index/index.html
1

スキルアップ/キャリアアップ(JOB@IT)