2017-12-14 17 views
0

일부 문서 정보를 캐시하기 위해 MemoryCache 클래스의 인스턴스를 만들려고합니다. 문제는 내가 예외를 얻지는 않지만 MemoryCache 인스턴스는 항상 'Nothing'을 반환한다는 것입니다. 다음 코드를 사용하고 있습니다.MemoryCache의 vb.net 인스턴스는 항상 캐시에서 Nothing을 반환합니다.

인스턴스 구축 : 저장

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 

코드/(항상 if 문으로 이동) 정보 검색 : 테스트를 통해

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 

내가 찾은를 그 기본 MemoryCache를 사용하여 인스턴스 ObjInfoCache = MemoryCache.Default은 완벽하게 작동합니다. 그러나 그것은 제가 필요로하는 한계 속성을 설정하게하지 않습니다. 나는 또한 Nothing을 반환하는 설정 ObjInfoCache = new MemoryCache("TestCache")을 추가하지 않고 새 MemoryCache 인스턴스를 만들려고했습니다.

나는 .NET 프레임 워크 반환 약 4

+0

생성자는 단순히 Nothing을 반환 할 수 없습니다. 생성자가 객체를 만들고 객체를 만들 수없는 유일한 방법은 예외를 throw하는 것입니다. 다른 일이 벌어지고있다. – jmcilhinney

+1

그런데, 당신은 config 파일에서 그 한계를 지정할 수 있고'Default' 인스턴스가 거기에서 그것을 사용할 수 있다는 것을 알고 있습니까? – jmcilhinney

+0

@jmcilhinney, 네, 방금 구성 설정을 찾았습니다 :) thx. 아직도 호기심이 있지만 왜 작동하지 않습니다. C#에서 새로운 빈 프로젝트를 만들었고 완벽하게 작동합니다. 반환에 관하여; 캐시 인스턴스에서 변수를 호출 할 때 아무 것도 리턴하지 않는다는 것을 의미했습니다 (생성자는 인스턴스를 초기화하는 방법을 보여 주기만했습니다). 죄송합니다. 조금은 모호한 점이 있습니다. [여기에 오는 ppl에 대한 참조 파일로 설정] (https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/memorycache-element-cache-settings) – STDMP

답변

1

를 사용하고 있습니다; 나는

난 당신이 때문에 해당 참조가 일반적입니다, 당신은 SharedObjInfoCache를 선언 한 ObjInfoCache.

를 정의하는 클래스의 여러 인스턴스를 생성하는 것으로 의심되는 캐시 인스턴스 변수를 호출 할 때 그것은 아무것도 반환되지 의미 모든 클래스의 인스턴스. 그러나 클래스 인스턴스 생성자 (Public Sub New())에서이 참조를 초기화하고 있습니다. Shared으로 생성자를 변경하여 형식이 참조 될 때 한 번만 실행되도록합니다.

Shared 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 
+0

예 그게 다야! 매우 감사합니다. 내가 나 자신을 알아 차리지 못했다고는 믿을 수 없다. 그것이 'MemoryCache.Default'가 작동했기 때문에 이제는 완전히 이해되지만, 잘못된 트랙에 나를 던져 버린 것 같아요. – STDMP