Ich versuche, eine Instanz der MemoryCache-Klasse zu erstellen, um einige Dokument Informationen zwischenzuspeichern. Problem ist, dass, obwohl ich keine Ausnahmen bekomme, die MemoryCache-Instanz immer 'Nothing' zurückgibt. Ich verwende die folgenden Code-Teile;vb.net-Instanz von MemoryCache gibt immer nichts aus dem Cache
Bau der Instanz:
Private Shared ObjInfoCache As MemoryCache
Public Sub New()
Dim CacheSettings As NameValueCollection = New NameValueCollection(3)
CacheSettings.Add("CacheMemoryLimitMegabytes", 1024.ToString())
CacheSettings.Add("physicalMemoryLimitPercentage", 50.ToString())
CacheSettings.Add("pollingInterval", TimeSpan.FromMinutes(2).ToString())
ObjInfoCache = New MemoryCache("TestCache", CacheSettings)
End Sub
Code, speichert/ruft die Informationen (die immer in die if-Anweisung springt):
arrayOfPropValues = ObjInfoCache(docID)
If arrayOfPropValues Is Nothing Then
arrayOfPropValues = GetDocumentInfo(docID, arrayOfPropNames)
ObjInfoCache.Add(docID, arrayOfPropValues, New CacheItemPolicy() With {.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(60)})
End If
Durch Tests ich gefunden habe, mit, dass die Standard-Memory Beispiel ObjInfoCache = MemoryCache.Default
funktioniert perfekt. Es lässt mich jedoch nicht die Limit-Eigenschaften festlegen, die ich brauche. Ich habe auch versucht, eine neue MemoryCache-Instanz zu erstellen, ohne die Einstellungen ObjInfoCache = new MemoryCache("TestCache")
hinzuzufügen, die immer noch Nothing zurückgibt.
Ich bin mit .NET Framework 4
Ein Konstruktor kann einfach 'Nothing' nicht zurückgeben. Ein Konstruktor erstellt ein Objekt und die einzige Möglichkeit, ein Objekt nicht zu erstellen, ist eine Ausnahme auszulösen. Etwas anderes passiert. – jmcilhinney
Übrigens, ist Ihnen bewusst, dass Sie diese Grenzen in der Konfigurationsdatei angeben können und die 'Default'-Instanz sie von dort verwenden? – jmcilhinney
@jmcilhinney, yep, ich habe gerade die Konfigurationseinstellungen gefunden :) thx obwohl. Immer noch neugierig, warum es nicht funktioniert. Habe gerade ein neues leeres Projekt in C# erstellt und es funktioniert dort einwandfrei. Über die Rückkehr; Ich meinte, dass es Nothing zurückgab, wenn eine Variable von der Cacheinstanz aufgerufen wurde (der Konstruktor war nur da, um zu zeigen, wie ich die Instanz initialisiere). Tut mir leid, wenn ich ein bisschen vage war. [Konfigurationsdatei als Referenz für Personen, die hierher kommen] (https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/memorycache-element-cache-settings) – STDMP