我正在编写一个程序,用于搜索mp3文件并将其复制到指定目录。
目前我正在使用一个列表,里面填充了目录中的所有mp3(这不足为奇 - 很长一段时间。)然后我使用taglib-sharp将ID3Tags与输入的艺术家和标题进行比较。如果匹配,我会复制文件。
由于这是我的第一个程序,而且我对编程非常陌生,我认为必须有更好/更有效的方法来实现这一点。有人建议我可以尝试一下吗?
编辑:我忘了添加一个重要细节:我希望能够指定每次开始搜索时应搜索的目录(要搜索的目录将在程序本身中指定)。因此,将所有文件存储在数据库或类似的东西中并不是一个真正的选择(除非每次都有办法这样做仍然有效)。我基本上寻找最好的方法来搜索每次索引文件的目录中的所有文件。 (我知道这可能不是一个好主意,但我想这样做。如果没有真正的方法可以做到这一点,我将不得不重新考虑,但现在我想这样做。)
答案 0 :(得分:2)
你大部分都背负着IO的瓶颈,这是你工作的硬件的结果。复制文件是这里的分母(除了查找文件,与复制相比相比相形见绌)。
其他方式进行文件管理,每个方法都有更好的接口用于不同目的,例如NTFS Change Journals和低级扇区处理(不推荐),但是如果这是你在C#中的第一个程序,那么也许你不想冒险进行p /调用本机调用。
除了实际流程的替代方案之外,您可能会考虑最小化磁盘访问的机制 - 即不重做您已经完成或不需要执行的任何操作。
答案 1 :(得分:1)
使用数据库(简单的二进制序列化文件或RavenDb等嵌入式数据库)来缓存所有文件。并改为查询缓存。
还为数据库中的每个文件夹存储修改时间。每次启动应用程序时,将数据库中的时间与文件夹上的时间进行比较(并同步更改的文件夹)。
这应该会给你更好的表现。线程不会真正帮助搜索文件夹,因为它是需要时间的磁盘IO,而不是您的应用程序。