AddAccessRule очень медленно работает с большими папками - PullRequest
0 голосов
/ 08 июня 2018

У меня есть какой-то код, который мне пришлось реорганизовать, который стал чрезвычайно медленным после рефакторинга.

Это то, что я сейчас использую:

DirectoryInfo dInfo = new DirectoryInfo(vPath);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.AddAccessRule(new FileSystemAccessRule(GroupName,
                             FileSystemRights.Read | FileSystemRights.Traverse, 
                             InheritanceFlags.None, 
                             PropagationFlags.None, 
                             AccessControlType.Allow));

dInfo.SetAccessControl(dSecurity);

И это предыдущий код,который работал намного быстрее:

// Add a new access control entry (ACE) object (objAce) so that
// the NDSuser has Full Control permissions on NTFS file system files.

objAce1 = new AccessControlEntryClass();
objAce1.Trustee = (objSIdHex).ToString();

objAce1.AccessMask = Maske; //(int)1180159;

objAce1.AceType = (int)ActiveDs.ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED;
objAce1.AceFlags = (int)ActiveDs.ADS_ACEFLAG_ENUM.ADS_ACEFLAG_INHERIT_ACE
                 | (int)ActiveDs.ADS_ACEFLAG_ENUM.ADS_ACEFLAG_INHERIT_ONLY_ACE 
                 | 1;

objDAcl.AddAce(objAce1);

Я понятия не имею, почему это занимает так много времени, тем более что я пытаюсь установить права только для этой папки (без наследования / без распространения) - но для больших структур папокэто занимает минуты!

...