问题描述
我有一个设计要求,可以根据文件夹路径指定的文件获取 ListItemCollection 的总数。我目前有以下代码:
using (ClientContext spClientContext = AuthenticationManager().GetACSAppOnlyContext(siteUrl,_clientId,_clientSecret))
{
if (spClientContext != null)
{
int totalCount = 0;
CamlQuery camlQuery = new CamlQuery();
camlQuery.FolderServerRelativeUrl = getSiteUrlAbsolutePath(siteUrl) +
"/Shared Documents/" + folderPath;
camlQuery.ViewXml = "<View Scope="RecursiveAll">" +
"<Query>" +
"<Where>" +
"<Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>0</Value></Eq>" +
"</Where>" +
"</Query>" +
"</View>";
List list = spClientContext.Web.Lists.GetByTitle("Documents");
ListItemCollection listItems = list.GetItems(camlQuery);
spClientContext.Load(listItems);
spClientContext.ExecuteQuery();
if (listItems != null && listItems.Count > 0)
{
foreach (ListItem item in listItems)
{
if (item.FileSystemObjectType.Equals(FileSystemObjectType.File))
{
totalCount++;
}
}
}
}
}
这对我来说似乎是一个非常简单的查询。我没有加载一堆参数等。但是,当前需要以下时间来执行:
Total Count = 403
Execution Time = ~ 1276 ms
对于一个简单的查询来说,这似乎特别长?有什么明显的方法可以优化代码吗?
更新以显示隔离时间记录:
using (ClientContext spClientContext = AuthenticationManager().GetACSAppOnlyContext(siteUrl,_clientSecret))
{
if (spClientContext != null)
{
int totalCount = 0;
CamlQuery camlQuery = new CamlQuery();
camlQuery.FolderServerRelativeUrl = getSiteUrlAbsolutePath(siteUrl) +
"/Shared Documents/" + folderPath;
camlQuery.ViewXml = "<View Scope="RecursiveAll">" +
"<Query>" +
"<Where>" +
"<Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>0</Value></Eq>" +
"</Where>" +
"</Query>" +
"</View>";
// ************ Start Execution Time Logging ***************************************************************
Stopwatch stopwatch = Stopwatch.StartNew();
List list = spClientContext.Web.Lists.GetByTitle("Documents");
ListItemCollection listItems = list.GetItems(camlQuery);
spClientContext.Load(listItems);
spClientContext.ExecuteQuery();
// ************ Stop Execution Time Logging ***************************************************************
stopwatch.Stop();
Debug.WriteLine("Execution time: " + stopwatch.ElapsedMilliseconds + " ms.");
if (listItems != null && listItems.Count > 0)
{
foreach (ListItem item in listItems)
{
if (item.FileSystemObjectType.Equals(FileSystemObjectType.File))
{
totalCount++;
}
}
}
}
}
5 次运行的执行时间:
Execution time: 1348 ms. Total Count = 403
Execution time: 1125 ms. Total Count = 403
Execution time: 1447 ms. Total Count = 403
Execution time: 1102 ms. Total Count = 403
Execution time: 1402 ms. Total Count = 403
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)