- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我现在正在开发一个内存非常小的移动平台上的软件。在 I/O 瓶颈函数中,我需要使用 seek 操作从 img 文件中读取一些字节(您可以假设 seek 比直接从 memmry 读取慢 10 倍)。在我的测试中,这个函数被调用了7480325次,从bytes_offset 6800到130000读取字节,所以每个字节平均读取100次(有的字节读取3~4次,有的超过1000次)。
下面是我的统计数据。
bytes offset 6800 ~ 6900: 170884 times
bytes offset 6900 ~ 7000: 220944 times
bytes offset 7000 ~ 7100: 24216 times
bytes offset 7100 ~ 7200: 9576 times
bytes offset 7200 ~ 7300: 14813 times
bytes offset 7300 ~ 7400: 22109 times
bytes offset 7400 ~ 7500: 19748 times
bytes offset 7500 ~ 7600: 43110 times
bytes offset 7600 ~ 7700: 157976 times
...
bytes offset 121200 ~ 121300: 1514 times
bytes offset 121300 ~ 121400: 802 times
bytes offset 121400 ~ 121500: 606 times
bytes offset 121500 ~ 121600: 444 times
bytes offset 121600 ~ 121700: 398 times
max_bytes_offset 121703
min_bytes_offset 6848
然后我想使用 LRU schema 构建一个缓存,使 I/O 性能更好。在其他人的问题中,我发现哈希表+双向链表是一种好方法。但是如何构建一个结构来以最好的方式改善我的问题呢?我计划构建 1300 个桶,每个桶都有一个最大大小为 10 的双向链表。那么它占用的总内存约为 13KB。实现和维护简单,但我认为效率不是最好的。
在我的统计中,一些字节偏移间隔的命中率较高,而某些间隔的命中率较低。我如何构建一个结构来调整我的统计数据?
而且当我搜索一个key的时候,我需要遍历整个列表,大小为10,有没有其他搜索效率更高的方法?
在一些移动平台上,更多的内存可以用于缓存,而其他平台则允许更少。我怎样才能让我的缓存适应允许的内存变化,除了改变桶的大小?
好像caf的方法比较好。使用一个大的双向链表和一个大的哈希表将键映射到节点条目更有意义,并且可以更多地利用 LRU。但是设计哈希函数正在成为一个难题。
等待您的建议,谢谢~
最佳答案
如果每个桶中最多只有 10 个条目,那么最好不要使用双向链表,而是让每个桶成为一个循环数组(只有 10 个条目和一个“列表顶部”索引)。
您最好放弃 10 路集合关联设计并使用直接映射缓存(您有一个更大的哈希表,每个桶只存储一个条目)。集合关联设计适用于硬件,您可以使用专用硬件并行进行 n 路比较,但不适用于软件(除非您有可以为此利用的 vector 单元)。
适应您的统计数据的一种方法是设计您的哈希函数,使其将不同大小的地址范围映射到每个存储桶,这样每个存储桶获得大致相等的访问频率。
改变哈希表的大小是另一种明显的缩放缓存大小的方法。
关于c - C 中的 LRU 缓存设计,大小有限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3192873/
我有一个关于复杂性的简单问题。我在 Java 中有这段代码: pairs是 HashMap包含 Integer作为键,它的频率为 Collection作为一个值。所以: pairs = new Has
对于我的应用程序,我需要在 Coq 中使用和推理有限映射。谷歌搜索我发现 FMapAVL 似乎非常适合我的需求。问题是文档很少,我还没有弄清楚我应该如何使用它。 作为一个简单的例子,考虑以下使用对列表
我有一个主表tblAssetMaster A和一个移动表tblMovement M。 我想提取所有 Assets 及其当前位置,因此需要获取每个 Assets 的最新移动条目。 字段 A: Asset
我想让我的网站内容居中,但仅限于网页的特定宽度。所以当它超过 500px 时,我希望内容被修复,无法进一步拉伸(stretch)。无论如何都要这样做,还是我最好把所有东西都修好?希望有意义的是添加一些
我正在尝试批量删除 Backbone 模型的集合,如下所示...... collection.each(function(model, i){ model.destroy(); }); 我发现当每
我想要一个软件环境,在其中我可以在具有特定资源的硬件上测试我的软件的速度。例如,当我的主机硬件是具有 12GB RAM 的 3GHz 四核 amd64 时,该程序在具有 24 Mb RAM 的 800
在 Eclipse 中,我得到了 BigInteger.valueOf(2).pow(31093) 的值,但没有得到 BigInteger.valueOf(2).pow(31094) 的值(它是空的)
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
我想将 2 个表从本地 sql server 2000 上传到托管的 mysql。第一个表有 17 列和 680 行,其他 10 列和 8071 行。 我首先使用 xampp mysql 尝试离线,它
我在 S3 中自动生成并保存了静态 html 文件。有时文件大小达到 2mb。是否可以使用javascript来获取html文件的一部分,显示它,当用户到达页面底部时,获取下一部分等等? 最佳答案 X
我是一名优秀的程序员,十分优秀!