Pergunta

Eu estava trabalhando na documentação de um projeto de código aberto que criei há algum tempo chamado WebCacheHelper.É uma abstração além da funcionalidade de cache existente em System.Web.Caching.

Estou tendo problemas para encontrar os detalhes do algoritmo usado para limpar o cache quando o servidor fica com pouca memória.

Encontrei esse texto em MSDN:

Quando o servidor da web que hospeda um aplicativo ASP.NET é baixo na memória, o objeto de cache limpa itens seletivamente para liberar memória do sistema.Quando um item é adicionado ao cache, você pode atribuir uma prioridade relativa em comparação com os outros itens armazenados no cache.Os itens aos quais você atribui valores de prioridade mais altos têm menos probabilidade de serem excluídos do cache quando o servidor está processando um grande número de solicitações, enquanto os itens aos quais você atribui valores de prioridade mais baixos têm maior probabilidade de ser excluído.

Isso ainda é um pouco vago para o meu gosto.Quero saber quais outros fatores são usados ​​para determinar quando limpar um objeto em cache.É uma combinação da hora do último acesso e da prioridade?

Foi útil?

Solução

Vamos dar uma olhada no código-fonte.A purga começa em TrimIfNecessary() método em CacheSingle aula.Em primeiro lugar, ele tenta remover todos os itens expirados em FlushExpiredItems() método de CacheExpires aula.Se isso não for suficiente, ele começa a iterar através de "baldes" em CacheUsage.FlushUnderUsedItems().Dados/estatísticas de uso de cache divididos em "buckets" de acordo com CacheItemPriority e suas estatísticas/LRU tratadas separadamente em cada intervalo.Existem duas iterações por meio de buckets.A primeira iteração remove apenas itens recém-adicionados (durante os últimos 10 segundos).O segundo remove outros itens.Ele começa a remover itens de CacheItemPriority.Low balde e seus itens LRU.Ele para quando removido o suficiente, caso contrário, continua para os próximos itens LRU e intervalos de prioridade mais alta.Não toca CacheItemPriority.NotRemovable itens, pois não os adiciona aos intervalos de uso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top