我们往往会忘记一件事:Window 出色的缓存功能。如果您只是不关心缓存自己并且读取过程相当快(例如一个 single slurp
),您可能会忽略缓存。
在其他情况下,我会推荐一个非常容易实现的“MRU 缓存”(MRU = 最近使用的)。它们非常有效,并在几分钟内实施。
假设您想保留 20 个最常用的文件。只需创建一个列表。该列表将保存每个文件的内容(在一个数组中)和文件名。
每次您尝试(重新读取)文件的内容时,请先查看列表。如果在列表中,则将内容移动到列表的最前面并返回内容。如果不在列表中,则读取文件并将其放在列表的前面。如果列表现在包含超过 20 个元素,则丢弃列表的最后一个元素。
您可以根据需要增加“20”,并且将始终在内存中保留前 20 个最近使用的列表。
这是一些伪代码:
FileContents ReadFile(filename)
i = List.IndexOf(filename)
if (i == NOTFOUND)
content = PhysicallyRead(filename)
else
content = List[i];
List.RemoveItemAt(i);
end
List.InsertAt(0, content, filename)
If List.Length > MAXLENGTH
List.RemoveItemAt(MAXLENGTH)
我希望你能明白。您唯一需要注意的是列表操作相当快。
使用数据库通常是最好的方法,尤其是当您必须过滤文件内容、逐行进行计算等时。但是,如果速度真的很重要,内存中的解决方案可能会更好。
但是,如果您想让它保持简单和可扩展,请考虑使用前面答案中提到的嵌入式数据库解决方案(例如 SQLite、Firebird 嵌入式、SQL-Server 嵌入式)。
希望这个对你有帮助。