문제

Cachefactory의 인스턴스를 생성 한 다음 더 이상 사용하지 않으면 객체 생성 중에 사용 된 메모리가 해제되지 않습니다. 이는 캐시 팩토리가 여러 번 생성 될 수있는 모든 웹 앱 또는 시나리오에 실질적인 영향을 미칩니다. 이것의 증상은 비정상적으로 높은 메모리를 사용하여 프로세스를 사용하며 IIS에서는 앱이 할당 된 메모리를 더 빨리 오버런으로 더 자주 재활용해야 할 가능성이 높습니다.

다음 코드는 약 500MB의 증가를 보여줄 것입니다. 예, 메모리 사용의 거대 용량을 의미합니다!

복제하려면 다음 코드를 앱에 넣으십시오.

Dim CacheFactory1 As CacheFactory = New CacheFactory()
For i As Int32 = 1 To 1 * (10 ^ 4)
    CacheFactory1 = New CacheFactory()
    CacheFactory1 = Nothing
Next

이것에 대한 해결 방법은 두 가지뿐입니다.

  1. Velocity Team은 버그를 수정합니다 (그리고 나는 그들이 할 것이라고 확신합니다)
  2. 앱의 정적 메소드에서 동일한 Cachefactory 객체를 사용하고 캐시를 사용할 때마다 참조해야합니다. (이것은 작동하지만 제 생각에는 최적이 아닙니다.)

또한 캐싱 방법을 포장하는 데 사용할 수있는 캐싱 스코프가 있으며 곧 CodePlex에 게시 할 것입니다. 트랜잭션 범위와 마찬가지로 캐싱 메소드 주위에 포장 할 수 있으며 잠금 및 연결을 관리합니다.

도움이 되었습니까?

해결책 2

이 문제를 해결하기위한 범위 제공 업체를 구축합니다. 여기에서 코드를 얻을 수 있습니다.

http://www.codeplex.com/cachescope

다른 팁

그래서 질문은 어디에 있습니까? Velocity 팀이 버그에 대한 Microsoft Connect를 모니터링 할 가능성이 높기 때문에 버그를 제출하고 여기에 게시하지 않아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top