Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xml数据库-VB.Net中的数据组织和访问问题_Xml_Database_Vb.net_Xmldocument - Fatal编程技术网

xml数据库-VB.Net中的数据组织和访问问题

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

因此,我为我的音乐播放器创建了一个XML数据库,在其中存储歌曲数据(标题、艺术家、专辑、流派、年份)。生成数据库的代码工作正常,但速度很慢,代码如下图所示

                                       
                                       |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