2010-03-01 27 views
2

現在我用來計算大小的所有文件都是文件夾中的文件。我不認爲這是全部,因爲內容數據庫的大小約爲15GB。當我計算出10GB左右的所有文件的大小時。有誰知道我可能錯過了什麼?SharePoint使用API​​獲取單個網站的大小

這是我到目前爲止的代碼。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.SharePoint; 
using System.Globalization; 

namespace WebSizeTesting 
{ 
class Program 
{ 


    static void Main(string[] args) 
    { 
     long SiteCollectionBytes = 0; 

     using (SPSite mainSite = new SPSite("http://sharepoint-test")) 
     { 
      // loop through the websites 
      foreach (SPWeb web in mainSite.AllWebs) 
      { 

       long webBytes = GetSPFolderSize(web.RootFolder); 

       // Add in size of each web site's recycle bin 

       webBytes += web.RecycleBin.OfType<SPRecycleBinItem>().Select(item => item.Size).ToArray<long>().Sum(); 

       Console.WriteLine("Url: {0}, Size: {1}", web.Url, ConvertBytesToDisplayText(webBytes)); 

       SiteCollectionBytes += webBytes; 
      } 


      long siteCollectionRecycleBinBytes = mainSite.RecycleBin.OfType<SPRecycleBinItem>().Select(item => item.Size).ToArray<long>().Sum(); 

      Console.WriteLine("Site Collection Recycle Bin: " + ConvertBytesToDisplayText(siteCollectionRecycleBinBytes)); 

      SiteCollectionBytes += siteCollectionRecycleBinBytes; 
     } 

     Console.WriteLine("Total Size: " + ConvertBytesToDisplayText(SiteCollectionBytes)); 

     Console.ReadKey(); 
    } 



    public static long GetSPFolderSize(SPFolder folder) 
    { 
     long byteCount = 0; 

     // calculate the files in the immediate folder 
     foreach (SPFile file in folder.Files) 
     { 
      byteCount += file.TotalLength; 

      // also include file versions 
      foreach (SPFileVersion fileVersion in file.Versions) 
      { 
       byteCount += fileVersion.Size; 
      } 

     } 

     // Handle sub folders 
     foreach (SPFolder subFolder in folder.SubFolders) 
     { 
      byteCount += GetSPFolderSize(subFolder); 
     } 

     return byteCount; 
    } 

    public static string ConvertBytesToDisplayText(long byteCount) 
    { 
     string result = ""; 

     if (byteCount > Math.Pow(1024, 3)) 
     { 
      // display as gb 
      result = (byteCount/Math.Pow(1024, 3)).ToString("#,#.##", CultureInfo.InvariantCulture) + " GB"; 
     } 
     else if (byteCount > Math.Pow(1024, 2)) 
     { 
      // display as mb 
      result = (byteCount/Math.Pow(1024, 2)).ToString("#,#.##", CultureInfo.InvariantCulture) + " MB"; 
     } 
     else if (byteCount > 1024) 
     { 
      // display as kb 
      result = (byteCount/1024).ToString("#,#.##", CultureInfo.InvariantCulture) + " KB"; 
     } 
     else 
     { 
      // display as bytes 
      result = byteCount.ToString("#,#.##", CultureInfo.InvariantCulture) + " Bytes"; 
     } 

     return result; 
    } 
} 
} 

編輯下午2:15 3/1/2010 CST我算文件版本爲大小的部分代碼的能力增加。正如Goyuix在下面的帖子中所建議的那樣。它仍然有相當數量的物理數據庫大小。

edit 8:38 am 3/3/2010 cst我在計算每個網站的回收站大小和網站集回收站時添加了這些內容。這些更改由ArjanP提出。另外我想補充一點,我非常樂意採取更有效的方式來做到這一點。

+0

真的想回答什麼問題?這聽起來像你已經從數據庫的文件大小。這是一種好奇心,還是有你想要得到的一些具體信息? – Goyuix 2010-03-01 18:14:53

+0

我有數據庫的總大小。不過,我希望數據庫中每個單獨網站的大小,而不僅僅是網站集大小。更具體的說,最終的結果將是一個silverlight控件,它通過網格顯示站點層次和每個站點的大小。我已經完成了所有工作,只是總大小與數據庫大小不匹配。 – 249076 2010-03-01 19:16:12

回答

2

你認爲垃圾箱嗎?將有網站和網站集的罐頭,所有這些網站都佔用了內容數據庫中的空間。

在內容數據庫中總會有'開銷'..每個'空'Web將會消耗大量的字節。 30%似乎很多,但並不過分,這取決於內容和網絡數量的比例。

+0

我已經想出了我認爲是添加回收站文件所需的代碼。這些增加了約500mb的總數。這使得我的總數在15GB以上達到12.2GB,所以仍然是3GB的開銷。整個過程的一部分就是精確指出安裝SharePoint的每個部分增長最多的部分。我將如何計算您爲每個網絡提及的開銷? – 249076 2010-03-03 14:37:01

+0

創建一個新的子網站,而沒有人正在使用服務器,看看你的數據庫增長多少.. – ArjanP 2010-03-04 05:12:27

+1

此外,有2個回收站..每個子網站1,如/ subsite/_layouts/recyclebin。aspx和1的網站集,請參閱/_layouts/AdminRecycleBin.aspx – ArjanP 2010-03-04 05:17:16

1

內容數據庫還存儲配置信息,比如實際存在的列表,功能,權限等......雖然這可能不會佔用5GB的數據,但這是需要考慮的。此外,每個文件通常還與可能包含該文件的元數據的SPListItem相關聯。

您是否爲任何列表/庫啓用了版本控制?如果是這樣,您還需要檢查每個版本的SPListItem.Versions屬性。

+0

它看起來像文件版本是答案的一部分。我在每個文件的文件版本的循環中添加。這增加了超過1.5GB,這是我想象的總數的很大一部分。我們的用戶確實使用了很多共享版本。我已經編輯了帖子中的代碼來反映這一點。 – 249076 2010-03-01 20:14:00

1

我不太確定你的代碼是否也考慮列表附件。

+0

在我最初的測試中,它看起來像列表中的附加項目是計數的一部分。我通過創建一個新的自定義列表來測試這個。然後我做了一個新的空白項目,創建了一個16mb的rtf文件。然後我將該文件作爲附件添加到空白項目中。當我在測試服務器上運行代碼時,總計數增加了16MB的存儲空間。 – 249076 2010-03-01 19:27:35

相關問題