У меня есть более 8 000 000 записей в Active Directory. Я должен забрать всех пользователей из AD. Но я столкнулся с проблемой утечки памяти.Как получить список пользователей в Active Directory без утечки памяти с помощью C#
Как бы то ни было, я побежал на сервере. Он достиг около 10 ГБ оперативной памяти, чтобы успешно выполнить задачу.
Вместо того, чтобы собирать все 8 000 000 записей за раз, я планирую получать записи в группах. Все пользователи сгруппированы по департаменту. Следовательно, я хочу использовать это поле отдела для извлечения группы записей. Может ли кто-нибудь предложить мне, как это может быть достигнуто без какой-либо проблемы с утечкой памяти?
Вот мой запрос, чтобы получить всех пользователей по мудрым отделам. Но я не мог найти лучший способ получить уникальный отдел из AD. для чего потребуется меньше времени для выполнения.
public void GetUserFromGroup(String Department)
{
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domainName, userName, passwd, AuthenticationTypes.Secure);
DirectorySearcher dSearch = new DirectorySearcher(entry);
dSearch.PageSize = 1000;
dSearch.Filter = "(&(objectClass=*)(displayname=*)(Department=" + Department + "))";
dSearch.SearchScope = SearchScope.Subtree;
SearchResultCollection src = dSearch.FindAll();
DataTable dt = new DataTable();
dt.Columns.Add("displayname");
foreach (SearchResult sResultSet in src)
{
DataRow dr = dt.NewRow();
if (GetProperty(sResultSet, "displayname") != "")
{
dr["displayname"] = GetProperty(sResultSet, "displayname").ToString();
}
else
{
dr["displayname"] = null;
}
dt.Rows.Add(dr);
}
src.Dispose();
}
catch (Exception ex)
{
throw ex;
}
public static string GetProperty(SearchResult searchResult, string PropertyName)
{
try
{
if (searchResult.Properties.Contains(PropertyName))
{
return searchResult.Properties[PropertyName][0].ToString();
}
else
{
return string.Empty;
}
}
catch (Exception ex)
{
throw ex;
}
}
Это займет время войти, чтобы сделать эту задачу .... вместо того, чтобы PLS проверить, если есть текстовый файл с именем, как «Associate.txt», где доступны все активные пользователи каталогов. если да, тогда создайте хранимую процедуру для извлечения данных из этого текстового файла и храните их в таблице. Затем из ваших ур-приложений вы можете подключиться к вновь созданной таблице. –
Спасибо за ваши комментарии. Но где я могу найти файл «Associate.txt»? –
проконсультируйтесь с руководителем/менеджером вашей команды. для всех компаний, где они обращаются к активному каталогу, используемому для его хранения. –