明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

低效的SelectSingleNode與高效的ListView數(shù)據(jù)添加

[摘要]以下是Santomania帶給我們的一些提高代碼性能的建議,在他的博客網(wǎng)站上,你能看到不少他關(guān)于SharePoint的見解。一、低效的SelectSingleNode我最近一直在使用reflecti...
以下是Santomania帶給我們的一些提高代碼性能的建議,在他的博客網(wǎng)站上,你能看到不少他關(guān)于SharePoint的見解。

一、低效的SelectSingleNode

我最近一直在使用reflecting,然而我確實(shí)已經(jīng)通過Lamont Harrington對(duì)此做了提示,雖然對(duì)我來說這并不是一個(gè)新聞(一般說來,在木桶中,我不會(huì)是最慢的魚^_^),但我發(fā)現(xiàn)它仍然值得一提。

反編譯XmlNode.SelectSingleNode方法,你將獲得如下結(jié)果(原諒我的VB.Net):

Public Overloads Function SelectSingleNode(ByVal xpath As String) As XmlNode

Begin Function

Dim list1 As XmlNodeList
Dim node1 As XmlNode
Try

list1 = Me.SelectNodes(xpath)
node1 = list1.ItemOf(0)

Catch ArgumentOutOfRangeException

node1 = Nothing

End Try
Return node1

End Function

你將會(huì)看到,SelectSingleNode僅僅是SelectNodes的包裝,這意味著它(最快)不會(huì)比SelectNode更快,并且,如果你在深入研究一點(diǎn),SelectNodes反編譯后如下:

Public Overloads Function SelectNodes(ByVal xpath As String) As XmlNodeList
Begin Function

im navigator1 As XPathNavigator
navigator1 = Me.CreateNavigator
Return New XPathNodeList(navigator1.Select(xpath))

End Function

讓人感到沮喪痛苦的是:SelectNodes確實(shí)是創(chuàng)造了一個(gè)XPathNavigator實(shí)例。

我想,首選的解決方案是:實(shí)例化我們自己的XPathNavigator并且在對(duì)xml文檔執(zhí)行XPath查詢的時(shí)候重復(fù)使用它,特別是我們執(zhí)行嵌套循環(huán)的查詢時(shí)。

二、高效的ListView數(shù)據(jù)添加

怎樣促進(jìn)你的ListView的性能?不要使用在同一個(gè)的循環(huán)中去創(chuàng)造和添加ListViewItem的方法。更好的方法是:創(chuàng)造一個(gè)ListViewItem的集合,并且使用AddRange方法去添加它們。我顯示這個(gè)方法對(duì)團(tuán)隊(duì)中的一個(gè)開發(fā)者,在大量目錄添加的情況下(超過1500條記錄),他的ListView的性能比原來要高效1000倍。



最后,不知你注意到了沒有,DictionaryEntry不是一個(gè)類,而是一個(gè)結(jié)構(gòu)。