2013-12-20 2 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 из кеша, я беру его копию, используя DataSet.Copy, чтобы использовать вместо оригинала.

Смежные вопросы