Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 缓存类对象_C#_Wpf_Performance_Caching - Fatal编程技术网

C# 缓存类对象

C# 缓存类对象,c#,wpf,performance,caching,C#,Wpf,Performance,Caching,我的项目是WPF应用程序 我有一个类,例如具有多个属性的Products(string,int,List)。我希望将这个对象缓存在内存中(而不是文件中),并使用它。 还查找缓存对象更新时引发的事件,类似于HostFileChangeMonitor 我寻求上述解决方案的原因是: 我必须将当前对象发送到第三方dll(计时器为5秒),这是一个沉重的对象,阻碍了GUI的性能。 因此,通过缓存类对象,我将监视仅在缓存对象更新时调用此重载操作 我已经想到将对象属性值保存到txt文件,并使用HostFileC

我的项目是WPF应用程序

我有一个类,例如具有多个属性的
Products
string
int
List
)。我希望将这个对象缓存在内存中(而不是文件中),并使用它。 还查找缓存对象更新时引发的事件,类似于
HostFileChangeMonitor

我寻求上述解决方案的原因是: 我必须将当前对象发送到第三方dll(计时器为5秒),这是一个沉重的对象,阻碍了GUI的性能。 因此,通过缓存类对象,我将监视仅在缓存对象更新时调用此重载操作

我已经想到将对象属性值保存到txt文件,并使用
HostFileChangeMonitor
触发事件,但这将添加一个额外的IO操作


如果您有任何意见,请与我们分享?

谢谢大家查看我的问题。最后,我得到了使用特定于时间的内存缓存的工作代码。 张贴它可能对像我这样的人有用。并举例说明

    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)
        }
    }