Я создаю веб-часть для SharePoint 2010, которая выполняет итерацию по всему семейству сайтов сайта SharePoint, и для каждого файла в библиотеке документов будет сохраняться значение для каждого пользователя, зарегистрированного на этом сайте.Просто для записи, есть более сотни пользователей.
Пока я пробовал следующий код:
public static void CalculateValues(MyDataContext db, string siteUrl)
{
SPWebCollection webCollection = new SPSite(siteUrl).AllWebs;
Guid docLibFeatId = new Guid("00bfea71-e717-4e80-aa17-d0c71b360101");
List<int> user_ids = (from u in db.Users
select u.Id).ToList();
foreach (SPWeb web in webCollection)
{
foreach (SPList list in docLibraryColl)
{
if (list.TemplateFeatureId == docLibFeatId && !list.Hidden)
{
SPDocumentLibrary docLib = (SPDocumentLibrary)list;
SPFolder root = docLib.RootFolder;
TrackingUtility.GetFolderNode(db, user_ids, web, root);
}
}
web.Dispose();
}
}
public static List<SPFolder> GetFoldersInFolder(CogitoRecommendationsDataContext db, SPFolder folder)
{
List<SPFolder> result = new List<SPFolder>();
SPFolderCollection subFolders = folder.SubFolders;
foreach (SPFolder subFolder in subFolders)
{
result.Add(subFolder);
}
return result;
}
public static void GetFolderNode(CogitoRecommendationsDataContext db, List<int> user_ids, SPWeb web, SPFolder folder)
{
List<SPFolder> folders = GetFoldersInFolder(db, folder);
for (int j = 0; j <= folders.Count - 1; j++)
{
SPFolder folderNode = folders[j];
foreach (var id in user_ids)
{
SPUser spUser = web.AllUsers.GetByID(id);
SaveValue(db, spUser, web, folderNode.UniqueId, SPAuditItemType.Folder);
}
SPFolder subfolder = folder.SubFolders[j];
GetFolderNode(db, user_ids, web, subfolder);
}
}
Итак, когда я выполняю метод CalculateValues
,его завершение занимает слишком много времени, а иногда даже не заканчивается, потому что он выбрасывает OutOfMemory exception
(может быть, есть какой-то нерасположенный объект?).
Кто-нибудь знает, как быстрее сделать это?Я действительно не знаю, что еще попробовать.