Как улучшить оформление веб-служб с помощью системы.DirectoryServies.Коррупция, которая работает очень медленно?


Этот метод работает чуть менее двух минут. Я бы хотел, чтобы оптимизировать его для работы в менее чем 15 секунд. Используя фильтр, лямбда в моем списке перед переборе элементов и удаление одного условного оператора в методе сбрил 30 секунд. Любые идеи, чтобы улучшить производительность?

на C# .net версии 4.0

[SecurityCritical]
        [SecurityPermissionAttribute(SecurityAction.Demand)] 
        private static void GetGroupMembership(List<ActiveDirectoryPrincipalProperties> userGroupProperties)
        {
            List<ActiveDirectoryPrincipalProperties> groupProperties = new List<ActiveDirectoryPrincipalProperties>();

            foreach (ActiveDirectoryPrincipalProperties gProperties in userGroupProperties.FindAll(token => token.groupYesNo.Equals(true)))
            {

                PrincipalContext ctx = new PrincipalContext(ContextType.Domain, gProperties.groupDomain);
                try
                {

                    GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, gProperties.groupName);

                    foreach (Principal member in group.GetMembers(true))
                    {
                        ActiveDirectoryPrincipalProperties memberProperties = new ActiveDirectoryPrincipalProperties();
                        memberProperties.fullGroupName = gProperties.fullGroupName;
                        memberProperties.groupDomain = gProperties.groupDomain;
                        memberProperties.groupName = gProperties.groupName;
                        memberProperties.groupType = gProperties.groupType;
                        memberProperties.groupYesNo = false;
                        memberProperties.memberDomain = member.Context.Name.ToString();
                        memberProperties.memberName = member.SamAccountName.ToString();
                        memberProperties.memberType = member.StructuralObjectClass.ToString();
                        memberProperties.sqlUserOnlyYesNo = false;

                        groupProperties.Add(memberProperties);
                    }
                    group.Dispose();
                }
                finally
                {
                    ctx.Dispose();
                }


            }

            userGroupProperties.AddRange(groupProperties);
        }


945
3
задан 23 июня 2011 в 05:06 Источник Поделиться
Комментарии
1 ответ

Если вы пишете это в Visual Studio 2010, то стоило бы профилировать ваш код, чтобы выяснить, какие именно вызовы метода дольше.

Вот ссылка, где можно посмотреть видео с Channel 9 об использовании встроенный анализатор производительности в Visual Studio 2010 для выполнения выборки ЦП на ваш код: http://channel9.msdn.com/Blogs/wriju/CPU-Sampling-using-Visual-Studio-2010-Performance-Analyzer-Tool

Как только вы определяли методами, которые требуют больше всего времени на выполнение, Вы можете начать работать, если вы делаете любой излишней или чрезмерной звонки и удалить их, или исследовать каждый вызов, чтобы найти способы оптимизации каждого.

2
ответ дан 27 июля 2011 в 12:07 Источник Поделиться