c# - 使用 select 进行 SQL 过滤 VS 使用内存进行 lambda 过滤
问题描述
我有一个用于教堂服务的 C# 程序,您可以在其中从列表中选择一首歌曲并放在投影仪或屏幕上。这个列表目前保存在 .txt 文件中(我是几年前制作的),目前我有大约 270 首不同的歌曲。
在程序中,您可以按歌曲名称和歌曲内容进行过滤和搜索。这是非常昂贵的,因为每次我搜索一些文本时,程序都会检查 txt 文件中的 270 首歌曲中的每一首:它每次都会打开、读取和关闭它们。
现在我想更改并创建一个数据库(SQLite)来保存和搜索那里的歌曲和诗句。
我的疑问如下,如果我每次要查阅、过滤或搜索歌曲时都进行选择,那么在性能视图中哪个更好?将所有内容加载到内存中并创建 Lambda 函数以改进搜索和过滤器会更好吗?还是通过SQL来做每一个操作更好?
谢谢!
PD:我添加了一些数字:
270首歌曲:磁盘空间总共约为1 MB。
每首歌曲 5-6 节:1.620 节。
每节 4-5 节:8.100 节。
解决方案
好消息是您不必在意。看,任何像过去 60 年左右编写的数据库都会在内存中保留它可以保留的任何内容,只要有足够的内存。因此,除非您卸载 SqlLite 并且如果您设置了合理的内存限制,否则无论如何数据库都会在内存中结束。您(隐含的)假设查询命中存储将是正确使用数据库的巨大失败。特别是考虑到它是多么可悲(总共 1mb)——我们不谈论可能挑战内存的十几个千兆字节内存数据库,数据库小到足以最终进入 CPU 缓存。
推荐阅读
- python - 使用 scipy 将 CDF 与真实数据拟合,但 CDF 不是从 0 开始
- c# - 如何在 ASP.NET Core 3.1 中找到 bin 目录?
- outlook - 我可以使用收件人日历中的数据填充 Outlook 可操作邮件吗?
- elasticsearch - Elasticsearch - 检查布尔关键字是否在文本中
- sparc - 预建的 sparc 裸机交叉编译器不工作
- python - 在多处理中,每个进程在 CPython 中都有自己的 GIL 是真的吗?这与创建新的运行时有何不同?
- php - 嵌套评论系统的延迟加载与急切加载
- laravel - laravel 6中刷新页面后自动注销
- javascript - Macbook / Safari 上的图像拉伸,所有屏幕尺寸
- php - 无法保存数据