现在,我用来计算大小的是文件夹中的文件。我认为这不是全部,因为内容数据库大小约为15gb。当我计算所有文件的大小时,我得到10gb左右。有谁知道我可能缺少什么?
这是我到目前为止的代码。
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 pm 3/1/2010 cst 我添加了计算文件版本作为代码大小的一部分的能力。正如Goyuix在下面的帖子中所建议的那样。它仍然受到相当大的物理数据库大小的影响。
编辑2010年3月3日上午8:38 cst 我在计算每个网站和网站集回收站的回收站大小时添加了。这些变化由ArjanP建议。另外,我想补充一点,我对这种做法更加有效。
答案 0 :(得分:2)
您是否考虑过垃圾桶?网站和网站集将有罐头,所有这些都占用了内容数据库中的空间。
内容数据库中总会有“开销”......每个“空”Web都会消耗很多字节。 30%似乎很多但不过量,这取决于含量和网络数量的比例。
答案 1 :(得分:1)
内容数据库还存储配置信息,例如实际存在的列表,功能,权限等......虽然这可能不会占用5GB的数据,但需要考虑。此外,每个文件通常还与可能包含该文件的元数据的SPListItem相关联。
您是否为任何列表/库启用了版本控制?如果是这样,您还需要检查每个版本的SPListItem.Versions属性。
答案 2 :(得分:1)
我也不太确定您的代码是否也会考虑列表附件。