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的建议和帮助:-