0

製品ページのパフォーマンスを向上させるためにキャッシュを実装することにしました。

各ページには、製品の画像が大量に含まれています。

Razorビューで次のコードを作成しました。

@{   
var productID = UrlData[0].AsInt();
var cacheItemKey = "products"; 
var cacheHit = true; 
var data = WebCache.Get(cacheItemKey);

var db = Database.Open("adldb");
if (data == null) { 
cacheHit = false; 
} 
if (cacheHit == false) {   
data = db.Query("SELECT * FROM Products WHERE ProductID = @0", productID).ToList();
WebCache.Set(cacheItemKey, data, 1, false);
}
}

次のコードでデータを使用しています。

@foreach (dynamic p in data)
{
<a href="~/Products/View/@p.ProductID"
<img src="~/Thumbnail/@p.ProductID"></a>
}

キャッシングコードはうまく機能しますが、新しいクエリ文字列パラメーターを渡す(ページのバージョンを変更する)と、ブラウザーでの結果は宣言されたキャッシング時間と同じになります。

ページのすべてのバージョンをキャッシュする方法は?

ありがとう

オレグ

4

1 に答える 1

0

productID非常に簡単な方法は、キー( )を文字列に変換し、それをの名前に追加すること cacheItemKeyです。

したがって、行を変更することを検討してください。

var cacheItemKey = "products"; 

読むために:

var cacheItemKey = "products" + productID.ToString();

これにより、探している動作が生成されます。基本的には、VaryByParamセットアップを模倣しています。

ps。私はあなたがすべきどんな種類の防御コードも追加していないことを覚えておいてください

お役に立てば幸いです。

于 2013-03-21T21:52:50.420 に答える