/* 换用别的传递内容或者返回新的List减少内存占用?listnode的引用会导致GC无法清理HtmlDocument? * 实测发现返回换成返回一个新List也没有减少内存占用。。 */ internal IEnumerable <SongModel> ParseAlbumSongs(HtmlNode listnode, AlbumModel album) { foreach (var node in listnode.ChildNodes) { if (node.NodeType != HtmlNodeType.Element) { continue; } uint songID = uint.Parse(node.SelectSingleNode("./span").GetAttributeValue("rel", "0")); SongModel song = SongModel.GetNew(songID); song.Name = node.SelectSingleNode("./div/a").InnerText; song.TrackArtist = node.SelectSingleNode("./div/span")?.InnerText; song.PlayCount = int.Parse(node.SelectSingleNode("./div[2]/span").InnerText); song.Album = album; yield return(song); } }
internal IEnumerable <SongModel> ParseArtistSongs(HtmlNode listnode) { foreach (var item in listnode.ChildNodes) { if (item.NodeType != HtmlNodeType.Element) { continue; } var id = uint.Parse(item.SelectSingleNode("./span").GetAttributeValue("rel", "0")); SongModel song = SongModel.GetNew(id); song.Name = item.SelectSingleNode(".//a").InnerText; int playcount = -1; if (int.TryParse(item.SelectSingleNode("./div/span").InnerText, out playcount)) { song.PlayCount = playcount; } yield return(song); } }