为什么GetAccessControl函数在初次运行时非常慢?

时间:2019-05-08 08:59:46

标签: c# performance file-permissions

我正在检查是否可以访问共享文件夹。

这是我的代码:

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;

我的问题是,第一次重启PC后,Directory.GetAccessControl(path)大约需要8秒钟。

但是如果我再次执行它,它会非常快(<1s)。

为什么GetAccessControl第一次运行时速度很慢?

如何解决此问题?

0 个答案:

没有答案