2013-12-20 17 views
1

我有一個應用程序在HttpRuntime.Cache中緩存數據庫中的數據。當我以每秒1000個用戶的速度加載測試此應用程序時,緩存中的某些值將被損壞。HttpRuntime.Cache在Windows Azure的高負載下損壞數據

例如,我有一個頁面,它只是查詢數據庫的內容。它首先檢查緩存,如果可用則從那裏獲取數據。

DataSet ds; 

var cachedData = HttpRuntime.Cache["homepage"]; 

if (cachedData == null) { 

    ds = getDataSet("SQL query..."); 

    addToCache("homepage", ds); 

} 
else { 

    ds = (DataSet)cachedData; 

} 

這工作得很好高達每秒約100個用戶,但是當我開始壓力測試多達1000個用戶的一些緩存表中的字段返回DBNull.Value。經過測試,當我檢查緩存中有什麼時,我可以看到字段現在是DBNull.Value。

我已啓用日誌記錄並檢查了DataSet僅添加到緩存一次,但在壓力測試過程中以某種方式被破壞。

有沒有人見過這個或有什麼問題有一些指針?它是在Windows Azure下承載的,具有專門的緩存工作者角色。

回答

0

問題原來是在我從表中更新列中的某個列後,緩存中的數據損壞了緩存中的數據但是間歇性地很難檢測到。現在從緩存中獲取數據集後,我使用DataSet.Copy獲取其副本,而不是原始數據。