.net – 使内存密集型后台应用程序“友好”

我有一个应用程序,周期性地需要使用计算上无关紧要的算法处理大块数据.事实证明,我还可以通过将数据块保存在内存缓存中来防止系统从硬盘访问中减慢速度.该应用程序是一个低优先级的应用程序,所以我正在努力减少它对系统的影响,这意味着使用额外的内存(如果可用)来减少CPU和硬盘驱动器的负载.缓存的数据只有64MB的字节块,我在内存中的数据越多,程序对驱动器的开销就越小.

我需要做的是在系统上的任何其他应用程序需要比可用物理内存更多的物理内存时转储内存缓存,并且这样做得足够快以至于用户从不会因为高内存需求而感觉系统变慢.

我对如何在.NET应用程序中实现这一点特别感兴趣.

最佳答案 一种选择是使用ASP.NET Cache,它可以清除项目以响应内存不足.虽然微软警告说它只在ASP.NET应用程序中进行了测试,但没有什么可以阻止你在任何应用程序中访问HttpRuntime.Cache,实际上它在我这样做时起作用了.

如果这感觉很脏又错误(或者只是不能满足你的需求),我们至少可以从ASP.NET知道清除缓存的方式中汲取灵感.它会定期调用内核的GlobalMemoryStatusEx以找出可用的内存.具体来说,返回结构的dwMemoryLoad属性是正在使用的总内存的百分比.默认情况下,ASP.NET认为当内存达到90%时内存不足.

有一些示例代码可以自己调用here.

点赞