xml数据库-VB.Net中的数据组织和访问问题
因此,我为我的音乐播放器创建了一个XML数据库,在其中存储歌曲数据(标题、艺术家、专辑、流派、年份)。生成数据库的代码工作正常,但速度很慢,代码如下图所示xml数据库-VB.Net中的数据组织和访问问题,xml,database,vb.net,xmldocument,Xml,Database,Vb.net,Xmldocument,因此,我为我的音乐播放器创建了一个XML数据库,在其中存储歌曲数据(标题、艺术家、专辑、流派、年份)。生成数据库的代码工作正常,但速度很慢,代码如下图所示 |Aritsts Database >|Aritst ->(Name,Songs,Count) Music Library -->For Loop> Xml D
|Aritsts Database >|Aritst ->(Name,Songs,Count)
Music Library -->For Loop> Xml Database|Albums Database >|Album ->(Name,Songs,Count)
|Genres Database >|Genre ->(Name,Songs,Count)
|Years Database >|Year ->(Name,Songs,Count)
艺术家数据库示例(其余的相册、年份、类型将相同)
因此,我要做的是在音乐库中循环,将艺术家、专辑、流派、年份存储在4个独立的列表(字符串)
中,然后从列表中删除重复项,然后制作一个列表(字符串)
(歌曲列表)然后我循环加载在XMLDocument
中的所有艺人XML数据库,如果艺人已经在那里,它将向当前艺人添加歌曲,否则它将创建一个新的艺人节点并向其中添加歌曲
唯一的问题是速度太慢,我认为这是代码的问题,但我不知道如何修复。以下是代码:
Dim OldCount As Double=My.Settings.MusicLibrary.Count
My.Settings.MusicLibrary.Clear()
将过滤器设置为字符串=“*.mp3 |*.wav |*.aiff |*.mp2 |*.mp1 |*.ogg |*.wma |*.flac |*.alac |*.webm”
对于My.Settings.librarypath中的每个路径
暗文件
如果My.Settings.DirectoryTopOpen=True,则
files=filters.Split(“|”c)。选择many(Function(filter)System.IO.Directory.GetFiles(path,filter,IO.SearchOption.TopDirectoryOnly)).ToArray()
其他的
files=filters.Split(“|”c)。选择many(Function(filter)System.IO.Directory.GetFiles(path,filter,IO.SearchOption.AllDirectories)).ToArray()
如果结束
对于文件中的每个文件
My.Settings.MusicLibrary.Add(文件)
下一个
下一个
Dim ArtistList作为新列表(字符串)
Dim AlbumList作为新列表(字符串)
Dim Tagger=无
对于My.Settings.MusicLibrary中的每个曲目
Tagger=TagLib.File.Create(轨迹)
ArtistList.Add(Tagger.Tag.JoinedPerformers)
AlbumList.Add(Tagger.Tag.Album)
Tagger=无
下一个
Dim NartistList=ArtistList.Distinct.ToList
Dim NalbumList=AlbumList.Distinct.ToList
My.Settings.ArtistLibrary.Clear()
My.Settings.AlbumLibrary.Clear()
为NartistList中的每位艺术家
My.Settings.ArtistLibrary.Add(艺术家)
下一个
对于列表中的每个相册
My.Settings.AlbumLibrary.Add(相册)
下一个
模糊标记器
对于My.Settings.MusicLibrary中的每首歌曲
_Tagger=TagLib.File.Create(歌曲)
My.Forms.Form1.Library_Main.Items.Add(新的ListViewItem({{u Tagger.Tag.Title,{u Tagger.Tag.JoinedPerformers,{u Tagger.Tag.Album,{u Tagger.Properties.Duration.TotalMinutes.ToString.Substring(0,4)。替换(“.”,“:”),_Tagger.Tag.Year,_Tagger.Properties.AudioBitrate,_Tagger.Properties.AudioChannel,_Tagger.Properties.AudioSampleRate,_Tagger.Properties.BitsPerSample,_Tagger.Properties.MediaTypes.ToString,song})
下一个
设置\u重建lib.Checked=False
My.Forms.Form1.ShowNotification(“Scanner”、“添加”和My.Settings.MusicLibrary.Count-OldCount&“到库中”、“Mr.Audio•Settings•Scanner”、“My.Resources.radar1、Color.DodgerBlue”)
UpdateListStatistics()
Dim With events BG_LIB_updater作为{.WorkerReportsProgress=True、.workerSupportsScanCellation=True}的新后台工作程序
公共子更新BStatistics()
Library_upd_overlay.Visible=True
图书馆(upd)(overlay.BringToFront)
BG_LIB_updater.RunWorkerAsync()
Private Sub BG\u SCANER\u DoWork(发送方作为对象,e作为DoWorkEventArgs)处理BG\u SCANER.DoWork
BG_扫描程序报告进度(0)
尝试
Dim NewSongs作为新列表(字符串)
如果设置\u scanlib.Checked=True,则
Dim OldCount As Double=My.Settings.MusicLibrary.Count
Dim OldLibrary作为字符串()
重拨旧库(旧计数-1)
My.Settings.MusicLibrary.CopyTo(旧库,0)
My.Settings.MusicLibrary.Clear()
将过滤器设置为字符串=“*.mp3 |*.wav |*.aiff |*.mp2 |*.mp1 |*.ogg |*.wma |*.flac |*.alac |*.webm”
对于My.Settings.librarypath中的每个路径
暗文件
如果My.Settings.DirectoryTopOpen=True,则
files=filters.Split(“|”c)。选择many(Function(filter)System.IO.Directory.GetFiles(path,filter,IO.SearchOption.TopDirectoryOnly)).ToArray()
其他的
files=filters.Split(“|”c)。选择many(Function(filter)System.IO.Directory.GetFiles(path,filter,IO.SearchOption.AllDirectories)).ToArray()
如果结束
对于文件中的每个文件
如果OldLibrary.Contains(文件),则
My.Settings.MusicLibrary.Add(文件)
其他的
NewSongs.Add(文件)
My.Settings.MusicLibrary.Add(文件)
如果结束
下一个
下一个
Dim ArtistList作为新列表(字符串)
Dim AlbumList作为新列表(字符串)
Dim Tagger=无
对于My.Settings.MusicLibrary中的每个曲目
Tagger=TagLib.File.Create(轨迹)
ArtistList.Add(Tagger.Tag.JoinedPerformers)
AlbumList.Add(Tagger.Tag.Album)
Tagger=无
下一个
Dim NartistList=艺术家。Disti