以下 是 Santomania 带给我们的一些提高代码性能的建议,在他的博客网站上,你能看到不少他关于 SharePoint 的见解。
** 一、低效的 ** ** SelectSingleNode **
我最近一直在使用 reflecting ,然而我确实已经通过 Lamont Harrington 对此做了提示,虽然对我来说这并不是一个新闻(一般说来,在木桶中,我不会是最慢的鱼^_^),但我发现它仍然值得一提。
反编译 XmlNode.SelectSingleNode 方法,你 将 获得如下结果(原谅我的 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
你将会看到, SelectSingleNode 仅仅是 SelectNodes 的包装,这意味着它(最快)不会比 SelectNode 更快,并且,如果你在深入研究一点, 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 确实是创造了一个 XPathNavigator 实例!!
我想,首选的解决方案是:实例化我们自己的 ** XPathNavigator ** 并且在对 xml 文档执行 XPath 查询的时候重复使用它,特别是我们执行嵌套循环的查询时。
** 二、 ** ** 高效的 ** ** ListView ** ** 数据添加 ** ** **
怎样促进你的 ListView 的性能?不要使用在同一个的循环中去创造和添加 ListViewItem 的方法。更好的方法是:创造一个 ListViewItem 的集合,并且使用 AddRange 方法去添加它们。我显示这个方法对团队中的一个开发者,在大量目录添加的情况下(超过 1500 条记录),他的 ListView 的性能比原来要高效 1000 倍。
最后,不知你注意到了没有, DictionaryEntry 不是一个类,而是一个结构。