2012-08-08 54 views
0

我嘗試清除Sharepoint中的一個非常大的列表。由於共享點緩慢的刪除機制,我決定從該列表中保存一個模板(沒有數據),刪除該列表,然後從該模板創建一個新列表。的是,代碼如下:在Sharepoint中創建列表需要時間

public static void TruncateList(SPList list) 
{ 
    SPSecurity.RunWithElevatedPrivileges(delegate() 
    { 
     using (SPSite site = new SPSite(list.ParentWeb.Site.ID)) 
     { 
     using (SPWeb web = site.OpenWeb()) 
     {    
       web.AllowUnsafeUpdates = true; 
       SPList listCopy = web.Lists[list.ID]; 
       string title = listCopy.Title; 
       string description = listCopy.Description; 
       string backupName = string.Format("BACKUP_{0}", title); 

       // Delete old Template if exists: 
       SPList gallery = web.Lists["List Template Gallery"]; 
       foreach (SPListItem item in gallery.Items) 
       { 
        if (item.Title == backupName) 
        { 
        item.Delete(); 
        break; 
        } 
       } 

       // Save Template: 
       listCopy.SaveAsTemplate(backupName, backupName, string.Empty, false); 

       // Load Template: 
       SPListTemplate template = web.Site.GetCustomListTemplates(web)[backupName]; 
       template = web.ListTemplates[backupName]; 

       // Delete List: 
       listCopy.Delete(); 

       // Add empty List from Template: [HANGS HERE!]               
       web.Lists.Add(title, description, template); 

       web.Update(); 
       web.AllowUnsafeUpdates = false; 
     } 
     ); 
     } 
    } 
} 

保存模板正常工作,以及刪除原始表(listCopy.Delete()),這需要一段時間

但是,試圖再次創建列表時( web.Lists.Add)服務器被卡住,直到它在幾分鐘後得到超時異常。

有用的提到:這是我的開發者機器。沒有人,但我的訪問由自己解決,網頁/列表

+0

你的ULS日誌中有什麼有趣的東西? – 2012-08-08 16:29:53

回答

0

的問題是,我使用該列表(「列表」)作爲參數。我改變它只是發送該列表的ID到該方法,並使用

using (SPWeb web = SPContext.Current.Web) 

裏面。現在它可以工作。