我有一个Sitecore解决方案,在两个Sitecore域中拥有大约800,000个用户。
我需要使用一个自定义属性导出所有用户。
我开始使用此代码.....
var getAllUsers = UserManager.GetUsers();
var file = Sitecore.Configuration.Settings.GetSetting("AllUsersFile", @"C:\AllUsers.txt");
using (System.IO.StreamWriter datafile = new System.IO.StreamWriter(file))
{
datafile.WriteLine("{0},{1},{2}", "email", "domain", "subscribed");
foreach (var user in getAllUsers)
{
var dn = user.Domain.Name;
if (dn == "domain1" || dn == "domain2")
{
var profile = (UserProfile)user.Profile;
var email = profile.Email;
if (!string.IsNullOrWhiteSpace(email))
{
var domain = user.Domain;
var subscribed = profile.GetCustomProperty(Settings.Account.SubscribedToNewsletter).ToBool();
datafile.WriteLine("{0},{1},{2}", email, domain, subscribed ? "1" : "0");
}
}
}
}
var response = new StringBuilder();
response.AppendLine("Done.");
SheerResponse.Alert(response.ToString());
这次运行30个小时后,它已经输出302,500然后死了(没有错误,它刚刚停止)。我试图从它停止的地方再次启动它,但这也很慢。
我看过https://pastebin.com/v10U2J2Z文章..
所以改了代码......
List<string> domainsList = new List<string> {"domain1", "domain2"};
var file = Sitecore.Configuration.Settings.GetSetting("AllUsersFile", @"C:\AllUsers.txt");
using (System.IO.StreamWriter datafile = new System.IO.StreamWriter(file))
{
datafile.WriteLine("{0},{1},{2}", "email", "domain", "subscribed");
foreach (string dname in domainsList)
{
List<User> getAllUsers = Domain.GetDomain(dname).GetUsers().ToList();
foreach (User user in getAllUsers)
{
var dn = user.Domain.Name;
var profile = (UserProfile)user.Profile;
var email = profile.Email;
if (!string.IsNullOrWhiteSpace(email))
{
var subscribed = profile.GetCustomProperty(Settings.Account.SubscribedToNewsletter).ToBool();
datafile.WriteLine("{0},{1},{2}", email, dn, subscribed ? "1" : "0");
}
}
}
}
var response = new StringBuilder();
response.AppendLine("Done.");
SheerResponse.Alert(response.ToString());
它现在已经运行了6个小时,它仍然没有从第一个域返回用户列表,更不用说开始获取每个用户的自定义属性了。
我应该期待这么久吗?还有另外一种方法可以做到这么长时间吗?
答案 0 :(得分:0)
如果有其他人遇到这个问题,最后我就是这样做的。
我备份了实时数据库,并将它们恢复为临时数据库。在使用这些数据库时,我更新了我的代码,以便在我获得详细信息后删除用户。删除的用户越多,运行得越快。正如我在问题中所说的那样,第一个300K需要30个小时,但在删除之后,下一个100K需要1个小时。
不是一个很好的解决方案,但它是一次性的数据提取。