【问题标题】:Cache class objects缓存类对象
【发布时间】:2018-05-27 05:53:30
【问题描述】:
我的项目是 WPF 应用程序。
我有一个类,例如 Products 具有多个属性(string、int、List<>)。我希望将此对象缓存在内存中(而不是在文件中),并使用它。
还寻找缓存对象更新时引发的事件,类似于HostFileChangeMonitor。
我寻找上述解决方案的原因是:
我必须将当前对象发送到第三方 dll(在 5 秒的计时器上),它是阻碍 GUI 性能的重物。
因此,通过缓存类对象,我将监控仅在更新缓存对象时调用这个繁重的操作。
我已经想过将对象属性值保存到 txt 文件并使用HostFileChangeMonitor 来触发事件,但这会增加一个 IO 操作。
如果有任何意见请分享?
【问题讨论】:
标签:
c#
wpf
performance
caching
【解决方案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)
}
}