Количество элементов CSOM ListCollectionItems зависит от проблем с производительностью пути к папке

#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.