以下是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不是一个类,而是一个结构。
