Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft graph api 图表-是否有更简单/更快的方法删除SharePoint列表中的所有项目?_Microsoft Graph Api_Microsoft Graph Sdks - Fatal编程技术网

Microsoft graph api 图表-是否有更简单/更快的方法删除SharePoint列表中的所有项目?

Microsoft graph api 图表-是否有更简单/更快的方法删除SharePoint列表中的所有项目?,microsoft-graph-api,microsoft-graph-sdks,Microsoft Graph Api,Microsoft Graph Sdks,下面的代码在列表中运行并删除每个项目。有没有更好的方法从列表中删除所有项目?除了移除并重新创建它之外?类似于列表。清除 var deleteQueryOptions = new List<QueryOption>() { new QueryOption("expand", "fields(select=id)") }; Console.WriteLine("Deleting ROWS from the list (UPDATING)"); var deleteItems =

下面的代码在列表中运行并删除每个项目。有没有更好的方法从列表中删除所有项目?除了移除并重新创建它之外?类似于列表。清除

var deleteQueryOptions = new List<QueryOption>()
{
   new QueryOption("expand", "fields(select=id)")
};

Console.WriteLine("Deleting ROWS from the list (UPDATING)");
var deleteItems = await graphServiceClient.Sites[siteUrl].Lists[listName].Items
                  .Request(deleteQueryOptions)
                  .GetAsync();

do
{
   Console.ForegroundColor = ConsoleColor.DarkYellow;
   Console.WriteLine("Processing PAGE of LIST ITEMS");
   Console.ResetColor();

   foreach (var deleteItem in deleteItems)
   {
      await graphServiceClient.Sites[siteUrl].Lists[listName].Items[deleteItem.Id]
                                .Request()
                                .DeleteAsync();
   }

   Console.ForegroundColor = ConsoleColor.Green;
   Console.WriteLine("Another PAGE of List Items successfully deleted");
   Console.ResetColor();
   try
   {
     deleteItems = await deleteItems.NextPageRequest.GetAsync();
   }
   catch
   {
     Console.ForegroundColor = ConsoleColor.DarkYellow;
     Console.WriteLine("There is no NextPageRequest for deleting items.");
     Console.ResetColor();
   }
   // While there is another page with data, get it and do the process again (At this moment 1 page contains 200 items, written by Marek Kyzivat @ 05/08/2019 )
} while (deleteItems.NextPageRequest != null);

这就完成了任务,但是一旦你有了一个更大的列表,它可能需要一些时间。

如果你像这样更新你的内部循环,它应该会有所帮助

ServicePointManager.DefaultConnectionLimit = 30;
var tasks = new List<Task>();

foreach (var deleteItem in deleteItems)
{
    task.Add(graphServiceClient.Sites[siteUrl].Lists[listName].Items[deleteItem.Id]
                                .Request()
                                .DeleteAsync());
}

Task.WaitAll(tasks.ToArray());
另外,请注意,默认打开的连接数为2。增加这个数字将使用更多的内存,但它将允许更多的并发调用


我很想知道在这种特殊情况下对性能的影响。目前,我们正在尝试确定更好的编程模型,以便对图形进行并发请求。

如果您不在任务上执行wait,而是将任务添加到数组中,然后执行task.wait,那么您可以并行执行一系列调用,而不是在调用下一个之前等待每个调用完成。哦,很酷,谢谢您的建议,你也有一个例子吗整体管理SharePoint内容的推荐方法是使用PowerShell。@TylerH由who推荐?使用Task.WaitAll删除似乎效果不错,但创建项目似乎有问题。是否可能存在SharePoint内部问题,即多个任务在同时被调用时试图填充相同的id位置?@MarekKyzivát创建列表项时可能存在一些并发限制。您可能希望限制用于创建项的并行任务的数量。或者,您也可以尝试使用BatchRequestContent对象在一个请求中创建多达20个项目。我在键入注释时立即限制了并行任务的数量。现在看起来还可以,但肯定会尝试BatchRequestContent。非常感谢Darrel的建议和帮助:-