Проблема кеша в asp.net с C#

Я использую элемент управления fileuplaod для загрузки изображений. Для этого я использовал его в кеше

в течение 2 часов в байтовом формате и показать это изображение с помощью HttpContext в файле.ashx. По какой-то причине

иногда сохраняется в кеше, а иногда нет. Я использую язык asp.net 2.0 и C#.

Мой код для сохранения:

//Name of the Image 
string strGuid = Guid.NewGuid().ToString(); 
byte[] byteImage = new byte[ImageUpload.PostedFile.ContentLength];

//file upload control ID "ImageUpload" and read it and save it in cache.
ImageUpload.PostedFile.InputStream.Read(byteImage, 0, byteImage.Length);

//Saving Byte in the cache
Cache.Add(strGuid, byteImage, null, DateTime.Now.AddDays(2), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);

//Saving Image Format in cache
Cache.Add(string.Format("{0}_Type", strGuid), strContentType, null, DateTime.Now.AddDays(2), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
UserImage.ImageUrl = string.Format("~/UserControl/ImageHander.ashx?imgId={0}", strGuid);

Код для рендеринга изображения с использованием файла.ashx:

public void ProcessRequest (HttpContext context) 
{
    string strImageGuid = context.Request.QueryString["imgId"].ToString();
    string strContentTypeID = string.Format("{0}_Type",  context.Request.QueryString["imgId"].ToString());
    byte[] byteImage =(byte []) context.Cache[strImageGuid];
    string strContentType = (string)context.Cache[strContentTypeID];
    context.Response.ContentType = strContentType;
    context.Response.OutputStream.Write(byteImage, 0, byteImage.Length);
}

Есть ли проблема с сохранением байтового изображения в кеше или каким-либо другим лучшим способом сделать это?

Спасибо! санджай приятель

2 ответа

Элементы, помещенные в кеш, не гарантированно находятся там. В некоторых ситуациях структура может истекать элементы из кэша, например, если она начинает исчерпывать память. В этом случае он вызовет onRemoveCallback, который вы передаете, когда добавляете элемент в кеш.

Кэш-память не является надежным хранилищем, необходимо всегда проверять, есть ли там элемент, прежде чем его использовать, и если он не выполняет необходимые действия для его извлечения и помещения обратно, чтобы его могли найти будущие абоненты.

Вы можете указать CacheItemPriority.NotRemovable вместо CacheItemPriority.Normal, чтобы предотвратить его удаление из кэша до истечения срока его действия.

Но более традиционный подход - разрешить его удаление и заполнить кеш, если вы обнаружите, что он отсутствует.

Другие вопросы по тегам