首页 > 解决方案 > 使用 select 进行 SQL 过滤 VS 使用内存进行 lambda 过滤

问题描述

我有一个用于教堂服务的 C# 程序,您可以在其中从列表中选择一首歌曲并放在投影仪或屏幕上。这个列表目前保存在 .txt 文件中(我是几年前制作的),目前我有大约 270 首不同的歌曲。

在程序中,您可以按歌曲名称和歌曲内容进行过滤和搜索。这是非常昂贵的,因为每次我搜索一些文本时,程序都会检查 txt 文件中的 270 首歌曲中的每一首:它每次都会打开、读取和关闭它们。

现在我想更改并创建一个数据库(SQLite)来保存和搜索那​​里的歌曲和诗句。

我的疑问如下,如果我每次要查阅、过滤或搜索歌曲时都进行选择,那么在性能视图中哪个更好?将所有内容加载到内存中并创建 Lambda 函数以改进搜索和过滤器会更好吗?还是通过SQL来做每一个操作更好?

谢谢!

PD:我添加了一些数字:

270首歌曲:磁盘空间总共约为1 MB。

每首歌曲 5-6 节:1.620 节。

每节 4-5 节:8.100 节。

标签: c#performancesqlitelambda

解决方案


好消息是您不必在意。看,任何像过去 60 年左右编写的数据库都会在内存中保留它可以保留的任何内容,只要有足够的内存。因此,除非您卸载 SqlLite 并且如果您设置了合理的内存限制,否则无论如何数据库都会在内存中结束。您(隐含的)假设查询命中存储将是正确使用数据库的巨大失败。特别是考虑到它是多么可悲(总共 1mb)——我们不谈论可能挑战内存的十几个千兆字节内存数据库,数据库小到足以最终进入 CPU 缓存。


推荐阅读