From 5911596ee6b8a23216a32d558d00dd733a2412a1 Mon Sep 17 00:00:00 2001 From: xtqqczze Date: Sat, 5 Dec 2020 12:08:39 +0000 Subject: [PATCH 1/2] Avoid array allocations from GetDirectories/GetFiles. Contributes to PowerShell#14318. --- .../engine/Modules/ModuleUtils.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/System.Management.Automation/engine/Modules/ModuleUtils.cs b/src/System.Management.Automation/engine/Modules/ModuleUtils.cs index b2ee85a1b03..a9c733063a4 100644 --- a/src/System.Management.Automation/engine/Modules/ModuleUtils.cs +++ b/src/System.Management.Automation/engine/Modules/ModuleUtils.cs @@ -81,7 +81,7 @@ internal static IEnumerable GetAllAvailableModuleFiles(string topDirecto string directoryToCheck = directoriesToCheck.Dequeue(); try { - string[] subDirectories = Directory.GetDirectories(directoryToCheck, "*", options); + IEnumerable subDirectories = Directory.EnumerateDirectories(directoryToCheck, "*", options); foreach (string toAdd in subDirectories) { if (firstSubDirs || !IsPossibleResourceDirectory(toAdd)) @@ -94,7 +94,7 @@ internal static IEnumerable GetAllAvailableModuleFiles(string topDirecto catch (UnauthorizedAccessException) { } firstSubDirs = false; - string[] files = Directory.GetFiles(directoryToCheck, "*", options); + IEnumerable files = Directory.EnumerateFiles(directoryToCheck, "*", options); foreach (string moduleFile in files) { foreach (string ext in ModuleIntrinsics.PSModuleExtensions) @@ -332,14 +332,14 @@ internal static List GetModuleVersionSubfolders(string moduleBase) if (!string.IsNullOrWhiteSpace(moduleBase) && Directory.Exists(moduleBase)) { var options = Utils.PathIsUnc(moduleBase) ? s_uncPathEnumerationOptions : s_defaultEnumerationOptions; - string[] subdirectories = Directory.GetDirectories(moduleBase, "*", options); + IEnumerable subdirectories = Directory.EnumerateDirectories(moduleBase, "*", options); ProcessPossibleVersionSubdirectories(subdirectories, versionFolders); } return versionFolders; } - private static void ProcessPossibleVersionSubdirectories(string[] subdirectories, List versionFolders) + private static void ProcessPossibleVersionSubdirectories(IEnumerable subdirectories, List versionFolders) { foreach (string subdir in subdirectories) { From 9a183e6246e8988365e9448ee6721c4b1dff39f4 Mon Sep 17 00:00:00 2001 From: xtqqczze Date: Sat, 5 Dec 2020 12:21:53 +0000 Subject: [PATCH 2/2] Inline temporaries --- .../engine/Modules/ModuleUtils.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/System.Management.Automation/engine/Modules/ModuleUtils.cs b/src/System.Management.Automation/engine/Modules/ModuleUtils.cs index a9c733063a4..128cd76d369 100644 --- a/src/System.Management.Automation/engine/Modules/ModuleUtils.cs +++ b/src/System.Management.Automation/engine/Modules/ModuleUtils.cs @@ -81,8 +81,7 @@ internal static IEnumerable GetAllAvailableModuleFiles(string topDirecto string directoryToCheck = directoriesToCheck.Dequeue(); try { - IEnumerable subDirectories = Directory.EnumerateDirectories(directoryToCheck, "*", options); - foreach (string toAdd in subDirectories) + foreach (string toAdd in Directory.EnumerateDirectories(directoryToCheck, "*", options)) { if (firstSubDirs || !IsPossibleResourceDirectory(toAdd)) { @@ -94,8 +93,7 @@ internal static IEnumerable GetAllAvailableModuleFiles(string topDirecto catch (UnauthorizedAccessException) { } firstSubDirs = false; - IEnumerable files = Directory.EnumerateFiles(directoryToCheck, "*", options); - foreach (string moduleFile in files) + foreach (string moduleFile in Directory.EnumerateFiles(directoryToCheck, "*", options)) { foreach (string ext in ModuleIntrinsics.PSModuleExtensions) {