C# 中是否有事件(或类似事件)来告知当前进程何时将从内存移动到页面文件?就此而言,还有一个从页面文件返回的事件。
或者,如果这些事件不存在,也许是更好的方法或建议?
我想做到这一点的原因:我有一个应用程序/库存管理程序,它允许您查看所有内容,并且它主要将所有这些信息保存在一个大列表中。我想在将其写入磁盘之前清除该列表。它只是成为陈旧的信息,并在必须恢复程序时减慢程序的返回速度。我宁愿查询数据库以获取新信息,而不是加载过时的信息。
不,没有这样的事件。即使有,内存也会在 err 页面级别换出,并且没有简单的方法可以知道哪些对象驻留在哪些页面中。此外,即使您知道对象 X 在页面 Y 中,X 也可能引用了可能驻留在其他页面中的其他对象。因此,即使 X 当前已分页,实际使用它也可能需要在其他内存中分页。垃圾收集器可以在其生命周期内移动内存中的对象,使整个问题变得更加复杂。
也就是说,对于您的用例,听起来您甚至不应该将数据存储在一个大列表中。你可以只使用普通的数据绑定吗?
没有这样的事件。但是,如果您的程序恰好使用 ASP.Net,那么您可以使用System.Web.Caching.Cache:当存在内存压力时,它会转储您的缓存对象。
我不知道 ASP.Net 之外有什么好的,但也许其他人可以提出一些建议?
编辑:meklarian 建议尝试System.Runtime.Caching,可能特别是MemoryCache。谢谢梅克拉里安!