【转】From 涂曙光‘s PPT in "Techend" : 关于SharePoint的代码优化 – 获取列表数据
2007-11-22 14:50 拖鞋不脱 阅读(610) 评论(0) 收藏 举报
会造成什么后果?
应用程序池频繁进行回收/重启操作
访问量一多,站点就明显变慢很多
访问量一多,站点就常出现“超时错误”、“页面不可用”等错误
SPLisst with For/Each
SPListItemCollection items = list.Items;
foreach (SPListItem item in items)
{ … }
SPList with SPQuery
SPList with DataTable
SPListItem with DataTable
List with Web Service
WSLists.Lists ws = new WSLists.Lists();
ws. Credentials = System.Net.CredentialCache.DefaultCredentials;
ws.Url = “http://myPortal/_vti_bin/lists.asmx”;
XmlNode node = ws.GetListItems(…);
Search
PortalSiteMapProvider
SPSite / SPWeb
当创建它们的实例对象时,会使用非托管资源
每个实例对象会占用 1-2 MB 内存
它们都实现了 IDisposable 接口 !
会造成什么后果?
应用程序池频繁进行回收/重启操作
访问量一多,站点就明显变慢很多
访问量一多,站点就常出现“超时错误”、“页面不可用”等错误.
不好的习惯
SPSite site = new SPSite(“http://Portal”); SPWeb web = site.OpenWeb(“MyWebSite/MySubSite”); foreach (SPWeb sWeb in site.GetSubWebsForCurrentUser()) { … }
好的习惯
using ( SPSite site = new SPSite(“http://portal”) )
{ using (SPWeb web = site.OpenWeb(“MyWebSite/MySubSite”))
{ foreach (SPWeb sWeb in site.GetSubWebsForCurrentUser()) { … sWeb.Dispose(); } } }
应用程序池频繁进行回收/重启操作
访问量一多,站点就明显变慢很多
访问量一多,站点就常出现“超时错误”、“页面不可用”等错误
SPLisst with For/Each
SPListItemCollection items = list.Items;
foreach (SPListItem item in items)
{ … }
SPList with SPQuery
1
SPQuery query = new SPQuery;
2
query.Query = “<Where>…</Where>”;
3
query.RowLimit = 100;
4
SPListItemCollection items = list.GetItems(query);
5
SPQuery query = new SPQuery;2
query.Query = “<Where>…</Where>”;3
query.RowLimit = 100;4
SPListItemCollection items = list.GetItems(query);5

SPList with DataTable
1
DataTable table = list.Items.GetDataTable();
DataTable table = list.Items.GetDataTable();SPListItem with DataTable
1
SPQuery query = new SPQuery;
2
query.Query = “<Where>…</Where>”;
3
query.RowLimit = 100; SPListItemCollection items = list.GetItems(query);
4
DataTable table = items.GetDataTable();
5
SPQuery query = new SPQuery;2
query.Query = “<Where>…</Where>”;3
query.RowLimit = 100; SPListItemCollection items = list.GetItems(query);4
DataTable table = items.GetDataTable();5

List with Web Service
WSLists.Lists ws = new WSLists.Lists();
ws. Credentials = System.Net.CredentialCache.DefaultCredentials;
ws.Url = “http://myPortal/_vti_bin/lists.asmx”;
XmlNode node = ws.GetListItems(…);
Search
1
FullTextSqlQuery query = new FullTextSqlQuery(mysite);
2
query.QueryText = “SELECT …”;
3
query.RowLimit = 100;
4
query.ResultTypes = ResultType.RelevantResults;
5
ResultTableCollection rtc = query.Execute();
6
FullTextSqlQuery query = new FullTextSqlQuery(mysite);2
query.QueryText = “SELECT …”;3
query.RowLimit = 100;4
query.ResultTypes = ResultType.RelevantResults;5
ResultTableCollection rtc = query.Execute();6

PortalSiteMapProvider
1
SPQuery query = new SPQuery;
2
query.Query = “<Where>…</Where>”;
3
query.RowLimit = 100;
4
5
PortalSiteMapProvider ps = PortalSiteMapProvider.WebSiteMapProvider;
6
PortalWebSiteMapNode node = (PortalWebSiteMapNode) ps.FindSiteMapNode(myWeb. ServerRelativeUrl);
7
8
SiteMapNodeCollection items = ps.GetCachedListItemsByQuery(node, “myListName”, query, myWeb);
9
foreach (PortalListItemSiteMapNode item in items)
10
{ … }
11
SPQuery query = new SPQuery;2
query.Query = “<Where>…</Where>”;3
query.RowLimit = 100;4

5
PortalSiteMapProvider ps = PortalSiteMapProvider.WebSiteMapProvider;6
PortalWebSiteMapNode node = (PortalWebSiteMapNode) ps.FindSiteMapNode(myWeb. ServerRelativeUrl);7

8
SiteMapNodeCollection items = ps.GetCachedListItemsByQuery(node, “myListName”, query, myWeb);9
foreach (PortalListItemSiteMapNode item in items)10
{ … }11

比较结果:




另外关于代码优化,还提到:
SPSite / SPWeb
当创建它们的实例对象时,会使用非托管资源
每个实例对象会占用 1-2 MB 内存
它们都实现了 IDisposable 接口 !
会造成什么后果?
应用程序池频繁进行回收/重启操作
访问量一多,站点就明显变慢很多
访问量一多,站点就常出现“超时错误”、“页面不可用”等错误.
不好的习惯
SPSite site = new SPSite(“http://Portal”); SPWeb web = site.OpenWeb(“MyWebSite/MySubSite”); foreach (SPWeb sWeb in site.GetSubWebsForCurrentUser()) { … }好的习惯
using ( SPSite site = new SPSite(“http://portal”) )
{ using (SPWeb web = site.OpenWeb(“MyWebSite/MySubSite”))
{ foreach (SPWeb sWeb in site.GetSubWebsForCurrentUser()) { … sWeb.Dispose(); } } }联系我
关注SQL、.Net、Silverlight、网页设计。



浙公网安备 33010602011771号