#c# #asp.net-mvc #sharepoint #sharepoint-online #csom
Вопрос:
У меня есть требования к дизайну, чтобы получить общее количество для 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 amp;amp; listItems.Count > 0)
{
foreach (ListItem item in listItems)
{
if (item.FileSystemObjectType.Equals(FileSystemObjectType.File))
{
totalCount ;
}
}
}
}
}
Мне кажется, что это довольно простой вопрос. Я не загружаю кучу параметров и т. Д. Однако в настоящее время для его выполнения требуется следующее время:
Total Count = 403
Execution Time = ~ 1276 ms
Это кажется исключительно долгим для простого запроса? Есть ли какие-либо очевидные способы оптимизации кода?
Редактировать [ответ @Darshani Jayasekara]:
Обновлено для отображения изолированного ведения журнала времени:
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>";
// ************ 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 amp;amp; 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
Комментарии:
1. В какой строке вы получаете повышение производительности, это выполнение или цикл?
2. @DarshaniJayasekara Спасибо за ответ. Я отредактировал исходное сообщение с указанием того, где начинается и заканчивается регистрация времени выполнения. Большая часть времени происходит изолированно до 4 строк кода, в которых находятся основные вызовы CSOM API.