HttpRuntime.Cache在Windows Azure上高负载下破坏数据

时间:2013-12-20 19:24:37

标签: asp.net caching azure

我有一个应用程序在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下托管,具有用于缓存的专用工作角色。

1 个答案:

答案 0 :(得分:0)

问题结果是我在从缓存中返回它后更新了表中的列,它以某种方式损坏了缓存中的数据但间歇性地因此很难检测到。现在从缓存中获取DataSet后,我使用DataSet.Copy来复制它,而不是原始的。