Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C语言在没有内存泄漏的情况下获取Active Directory中的用户列表_C#_Memory Leaks_Active Directory - Fatal编程技术网

C# 如何使用C语言在没有内存泄漏的情况下获取Active Directory中的用户列表

C# 如何使用C语言在没有内存泄漏的情况下获取Active Directory中的用户列表,c#,memory-leaks,active-directory,C#,Memory Leaks,Active Directory,我在Active Directory中有超过80万条记录。我必须从广告中获取所有用户。但我面临内存泄漏问题 无论如何,我在服务器上运行。为了成功完成任务,它达到了10GB左右的RAM大小 我计划分组获取记录,而不是一次获取所有80万条记录。所有用户按部门分组。因此,我想使用这个department字段来获取记录组。谁能告诉我如何在没有任何内存泄漏问题的情况下实现这一点 下面是我的查询,以按部门获取所有用户。但我找不到从广告中获取独特部门的最佳方法。这将花费更少的时间来执行 public

我在Active Directory中有超过80万条记录。我必须从广告中获取所有用户。但我面临内存泄漏问题

无论如何,我在服务器上运行。为了成功完成任务,它达到了10GB左右的RAM大小

我计划分组获取记录,而不是一次获取所有80万条记录。所有用户按部门分组。因此,我想使用这个department字段来获取记录组。谁能告诉我如何在没有任何内存泄漏问题的情况下实现这一点

下面是我的查询,以按部门获取所有用户。但我找不到从广告中获取独特部门的最佳方法。这将花费更少的时间来执行

    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;
            }
        }

也许您可以尝试加载所需的属性:

dsearch.PropertiesToLoad.Add("displayname");

执行此任务需要日志时间…请检查是否有名为Associate.txt的文本文件,其中所有active directory用户都可用。如果是这样,那么创建一个存储过程,从该文本文件中检索数据并存储在表中。然后,从您的应用程序中,您可以连接到新创建的表谢谢您的评论。但是在哪里可以找到Associate.txt文件?请与您的团队领导/经理联系。对于所有访问active directory(用于保存itI)的公司,itI具有数据的CSV,并将其批量插入数据库。但是,像displayname这样的字段将有一个逗号作为名称的一部分。我如何解决这个问题,以分离每个字段的值,并将正确的数据插入数据库。