2010-03-01 23 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

相关问题