我有一个应用程序在HttpRuntime.Cache中缓存数据库中的数据。当我以每秒1000个用户加载测试此应用程序时,缓存中的某些值会损坏。
例如,我有一个页面,它只是在数据库中查询它的内容。它首先检查缓存,如果可用,则从那里获取数据。
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 :(得分:0)
问题结果是我在从缓存中返回它后更新了表中的列,它以某种方式损坏了缓存中的数据但间歇性地因此很难检测到。现在从缓存中获取DataSet后,我使用DataSet.Copy来复制它,而不是原始的。