【问题标题】:How do I speed up below Sharepoint CSOM code?如何在 Sharepoint CSOM 代码以下加速?
【发布时间】:2019-12-14 12:02:25
【问题描述】:

我有以下 CSOM 代码来从列表中删除所有列表项。但这很慢。我怎样才能让它更快。

 public void DeleteListData()
        {
            string root = "mysite.com/";
            using (ClientContext clientContext = new ClientContext(root))
            {
                Web web = clientContext.Web;
                List list = web.Lists.GetByTitle("Search");
                var query = new CamlQuery() { ViewXml = "<View><Query><Where><IsNotNull><FieldRef Name='First_x0020_Name' /></IsNotNull></Where></Query></View>" };
                var items = list.GetItems(query);
                clientContext.Load(items);
                clientContext.ExecuteQuery();
                var count = items.Count;
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        items[i].DeleteObject();
                        items[i].Update();
                    }
                }

                clientContext.ExecuteQuery();
            }
        }

【问题讨论】:

    标签: sharepoint sharepoint-2013 sharepoint-list sharepoint-api sharepoint-clientobject


    【解决方案1】:

    据我所知,几乎没问题,只是尝试添加批处理逻辑以限制删除项目计数每个查询。

    我认为下面的代码是很好的示例。

    andyhuey/deleteAllFromList.cs

    private void deleteAllFromList(ClientContext cc, List myList)
    {
        int queryLimit = 4000;
        int batchLimit = 100;
        bool moreItems = true;
    
        string viewXml = string.Format(@"
            <View>
                <Query><Where></Where></Query>
                <ViewFields>
                    <FieldRef Name='ID' />
                </ViewFields>
                <RowLimit>{0}</RowLimit>
            </View>", queryLimit);
        var camlQuery = new CamlQuery();
        camlQuery.ViewXml = viewXml;
    
        while (moreItems)
        {
            ListItemCollection listItems = myList.GetItems(camlQuery); // CamlQuery.CreateAllItemsQuery());
            cc.Load(listItems,
                eachItem => eachItem.Include(
                    item => item,
                    item => item["ID"]));
            cc.ExecuteQuery();
    
            var totalListItems = listItems.Count;
            if (totalListItems > 0)
            {
                Console.WriteLine("Deleting {0} items from {1}...", totalListItems, myList.Title);
                for (var i = totalListItems - 1; i > -1; i--)
                {
                    listItems[i].DeleteObject();
                    if (i % batchLimit == 0)
                        cc.ExecuteQuery();
                }
                cc.ExecuteQuery();
            }
            else
            {
                moreItems = false;
            }
        }
        Console.WriteLine("Deletion complete.");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 2022-08-18
      • 2022-07-14
      • 2018-04-15
      • 1970-01-01
      相关资源
      最近更新 更多