缓存类对象

时间:2017-12-13 10:59:27

标签: c# wpf performance caching

我的项目是WPF应用程序。

我有一个类,例如Products有多个属性(stringintList<>)。我希望将此对象缓存在内存中(而不是在文件中),并使用它。 还要查找缓存对象与HostFileChangeMonitor类似的更新时引发的事件。

我正在寻找上述解决方案的原因是: 我必须将当前对象发送到第三方dll(在5秒的计时器上)并且它是妨碍GUI性能的重物。 因此,通过缓存类对象,我将监视只在缓存对象更新时调用此重操作。

我已经考虑将对象属性值保存到txt文件并使用HostFileChangeMonitor来触发事件,但这将再添加一次IO操作。

请分享是否有任何意见?

1 个答案:

答案 0 :(得分: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)
        }
    }