Цикл обхода IAzApplication Коллекция IAzRoles слишком медленная - PullRequest
1 голос
/ 30 ноября 2011

У меня есть этот простой код, который просматривает все приложения в Azman и все их роли. Это прекрасно работает, когда у меня нет пользователей, назначенных на роли. Но в тот момент, когда я назначаю пользователей (две роли имеют около 7000 пользователей), приложение зависает в коде foreach (IAzRole in _azApp.Roles) ... в основном, когда вы получаете доступ к коллекции ролей, оно зависает и занимает около 40 минут из этого. Это абсолютно недопустимо. Кто-нибудь может указать мне на решение? Все, что мне нужно, это список имен назначений ролей, почему назначения ролей замедляют это ...?

PS: все мои пользователи находятся в ADAM, а магазин Azman - в ADAM. Я также пробовал проходить через IAzTasks (roledefinition = 1), но это тоже медленно.

    public override string[] GetAllRoles()
    {
        List<string> rolesList = new List<string>();
        foreach (IAzApplication2 _azApp in AZManStore.Applications)
        {
            foreach (IAzRole role in _azApp.Roles)
            {
                //Weird that Roles are retrieved using tasks collection
                if (!rolesList.Exists(delegate(string x) { return x == role.Name; }))
                    rolesList.Add(role.Name);
            }
        }

        return rolesList.ToArray();
    }

1 Ответ

1 голос
/ 16 февраля 2012

Отвечаю на этот вопрос сам. В конце концов я обнаружил, что кэширование дескриптора для Azman - это то, что нужно для его быстрой работы, даже когда Azman основан на файлах. Для этого я добавил свойство, указанное ниже, в свой пользовательский AzmanProvider. И это снизило время назначения ролей до 2 секунд !!

    public AzAuthorizationStoreClass AZManStore
    {
        get
        {
            if (_azManStore == null)
            {                    
                _azManStore = new AzAuthorizationStoreClass();
                _azManStore.Initialize(0, this.ConnectionStringName, null);
            }
            return _azManStore;
        }
    }
...