Почему функция GetAccessControl в первый раз работает очень медленно? - PullRequest
1 голос
/ 08 мая 2019

Я проверяю, могу ли я получить доступ к общей папке или нет.

Это мой код:

var readAllow = false;
var readDeny = false;
var accessControlList = Directory.GetAccessControl(path);
if (accessControlList == null)
    return false;
var accessRules = accessControlList.GetAccessRules(true, true, typeof(System.Security.Principal.SecurityIdentifier));
if (accessRules == null)
    return false;

foreach (FileSystemAccessRule rule in accessRules)
{
    if ((FileSystemRights.Read & rule.FileSystemRights) != FileSystemRights.Read) continue;

    if (rule.AccessControlType == AccessControlType.Allow)
        readAllow = true;
    else if (rule.AccessControlType == AccessControlType.Deny)
        readDeny = true;
}

return readAllow && !readDeny;

Моя проблема в том, что в первый раз после перезагрузки компьютера Directory.GetAccessControl(path) занимает около 8 секунд.

Но если я выполню это снова, это будет очень быстро (<1 с). </p>

Почему GetAccessControl в первый раз работает очень медленно?

Как можно решить эту проблему?

...