2017-12-13 8 views
0

내 프로젝트는 WPF 응용 프로그램입니다.캐시 클래스 개체

나는 여러 가지 속성 (string, int, List<>)을 갖는 예 : Products을 가지고 있습니다. 메모리 (파일이 아닌)에이 객체를 캐시하고 사용하려고합니다. 캐시 개체가 HostFileChangeMonitor과 비슷하게 업데이트 될 때 발생하는 이벤트를 찾습니다.

내가 위의 해결책을 찾고있는 이유는 다음과 같습니다. 현재 개체를 제 3 자 DLL (5 초 타이머에 있음)에 보내야하고 GUI의 성능을 저해하는 무거운 물체입니다. 따라서 클래스 객체를 캐싱하여 캐시 객체가 업데이트 될 때만이 무거운 작업을 호출하도록 모니터링합니다.

이미 개체 속성 값을 txt 파일에 저장하고 HostFileChangeMonitor 이벤트를 트리거하는 것으로 생각했지만 IO 작업이 한 번 더 추가됩니다.

입력 사항이 있다면 알려주시겠습니까?

답변

1

내 질문을 모두에게 감사드립니다. 마지막으로 시간별 메모리 캐시로 작업 코드를 얻었습니다. 게시하는 것이 나 같은 사람에게 유용 할 수 있습니다. 예를 들어 설명합니다.

private MemoryCache mc = new MemoryCache("CacheProvider"); // Creating memory cache object. 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    // Method to get cache elements. 
    private void GetCache_Click(object sender, RoutedEventArgs e) 
    { 
     lstEmployeeID.Items.Clear(); 
     lstEmployeeName.Items.Clear(); 
     var emp = new Employee(); 
     foreach (Employee emp1 in emp.GetEmployeeList()) 
     { 
      var cacheObj = mc[emp1.EmployeeName] as Employee; // typecasting it class object. 
      if (cacheObj != null) 
      { 
       lstEmployeeID.Items.Add(cacheObj.EmployeeId); 
       lstEmployeeName.Items.Add(cacheObj.EmployeeName); 
      } 
     } 

    } 

    // Saving class object to cache. 
    private void SaveCache_Click(object sender, RoutedEventArgs e) 
    { 
     var emp = new Employee(); 
     var policy = new CacheItemPolicy(); 
     policy.AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(10.0); 
     foreach (Employee emp1 in emp.GetEmployeeList()) 
     { 
      mc.Add(emp1.EmployeeName, emp1, policy); // adding (key, objectItem, CachingPolicy) 
     } 
    }