J'utilise le bloc de mise en cache de la bibliothèque d'entreprise sans fichier de configuration. Les paramètres de cache sont initialisés à partir de mon code. J'initialiser le cache avec le code suivant:Configuration de la mise en cache de la bibliothèque d'entreprise sans fichier de configuration
static class LocalCache
{
private static readonly CacheManager CacheManager;
static LocalCache()
{
try
{
string localCacheName = "MyCache";
DictionaryConfigurationSource configSource = new DictionaryConfigurationSource();
CacheManagerSettings cacheSettings = new CacheManagerSettings();
configSource.Add(CacheManagerSettings.SectionName, cacheSettings);
CacheStorageData storageConfig = new CacheStorageData("NoStorage", typeof(NullBackingStore));
cacheSettings.BackingStores.Add(storageConfig);
var expirationPollFrequencyInSeconds = 2;
CacheManagerData cacheManagerData = new CacheManagerData(
localCacheName,
expirationPollFrequencyInSeconds,
100,
20,
storageConfig.Name
);
cacheSettings.CacheManagers.Add(cacheManagerData);
cacheSettings.DefaultCacheManager = cacheManagerData.Name;
CacheManagerFactory cacheFactory = new CacheManagerFactory(configSource);
CacheManager = cacheFactory.CreateDefault();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public static T GetData<T>(string cacheKey)
{
var value = CacheManager.GetData(cacheKey);
return (T)value;
}
public static void AddData(string cacheKey, object value)
{
CacheManager.Add(cacheKey, value);
}
}
Le problème est que les expirationPollFrequencyInSeconds
(ici 2 secondes) ne sont pas pris en compte lors de la récupération d'un élément de cache qui est censé expirer. L'élément réside dans le cache plus de 2 secondes. Une idée?
Voir un exemple de test ci-dessous:
private static void Main(string[] args)
{
try
{
LocalCache.AddData("One", 1);
Thread.Sleep(5000);
LocalCache.AddData("Two", 2);
object data = LocalCache.GetData<object>("One");
if (data == null) Console.WriteLine("Data not in cache");
else Console.WriteLine("-----> Data in cache whereas it should not !!!");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
Sortie:
-----> Data in cache whereas it should not !!!