我正在创建一个实现某种缓存的程序。我需要使用尽可能多的内存可能要做到这一点,我需要做两件事情:检查haskell中的内存使用情况
- 检查多少内存仍然在系统中可用(RAM只,而不是交换)
- 检查多少内存我应用程序已在使用。
我需要一个独立于平台的解决方案(Linux,Windows等)。
使用这两条信息我会减少缓存的大小或将其扩大。 我如何在Haskell中获得这些信息?有没有可以提供这些信息的软件包?
我正在创建一个实现某种缓存的程序。我需要使用尽可能多的内存可能要做到这一点,我需要做两件事情:检查haskell中的内存使用情况
我需要一个独立于平台的解决方案(Linux,Windows等)。
使用这两条信息我会减少缓存的大小或将其扩大。 我如何在Haskell中获得这些信息?有没有可以提供这些信息的软件包?
我不能立即看到如何做到这一点便携式。
但是,GHC确实有“弱指针”。 (请参阅System.Mem.Weak
。)如果您通过弱指针(仅限)创建项目并挂上它们,则垃圾收集器将在物理内存不足时自动开始删除项目。
(不幸的是,这不会给你来决定这要删除的项目的能力第一—如,是最便宜的重建者或已最少使用或东西的人。)
看起来很有趣!不幸的是,它需要一些体系结构的改变,但我可以考虑它。谢谢! – remdezx 2014-09-25 12:34:43
您可能也有兴趣知道'System.Mem'包含一些函数来激发GC在特定时间运行(例如,在您停止使用真正的大对象之后)。与你的问题没有直接关系,但可能很有趣。 – MathematicalOrchid 2014-09-25 12:37:12
我知道,当我更深入地研究那个话题时,我发现了他们:) – remdezx 2014-09-25 13:11:22
“检查系统中还有多少内存可用”。这个问题没有多少意义。你有一个交换文件,可以增长到2TB。所有的记忆“可用”?如果你占用这一切,你的系统就会停下来。也许你想检查物理内存。但是如果你在一个浏览器中打开了300个标签,并且这些标签都没有被触动一周,那该怎么办?他们已经准备好换掉一顶帽子,但他们现在占用了99.5%的物理内存,所以你根本没有任何“可用”的东西。 – 2014-09-25 10:06:22
@ n.m。我认为这是很明显的,为了实现缓存,我需要大量的可用空间在RAM中,而不是在SWAP中。构建一个可以使系统交换的缓存不是一个好主意。 ; p – remdezx 2014-09-25 10:16:26
为什么不让用户指定缓存大小?他们可能不想要一个自动使用所有RAM的程序。 – 2014-09-25 17:15:56