试图优化这两个for循环... GetFileList(字符串,字符串) 输入参数 1. adlsPath = ADLS路径 2. Prefix =前缀字符串(逗号分隔)
public List<string> GetFileList(string adlsPath, string prefix)
{
List<string> fileList = new List<string>();
List<string> prefixList = prefix.Split(',').ToList();
if (adlsClient.CheckExists(adlsPath))
{
Console.WriteLine($"{DateTime.Now.ToString()} - Getting the files in path: {adlsPath}");
foreach (DirectoryEntry file in adlsClient.EnumerateDirectory(adlsPath))
{
if (file.Type == DirectoryEntryType.FILE)
{
foreach (string prefixStr in prefixList)
{
if (file.Name.StartsWith(prefixStr))
{
Console.WriteLine($"{DateTime.Now.ToString()} - {file.FullName}");
fileList.Add(file.Name);
}
}
}
}
}
else
{
Console.WriteLine($"{DateTime.Now.ToString()} - The path was not found: {adlsPath}");
return fileList;
}
return fileList;
}
====================================
我已经更改了如下的for循环
foreach (string prefixStr in prefixList)
{
IEnumerable<DirectoryEntry> tempFile = adlsClient.EnumerateDirectory(adlsPath).Where(f => f.Name.StartsWith(prefixStr) && f.Type == DirectoryEntryType.FILE);
foreach (DirectoryEntry file in tempFile)
{
Console.WriteLine("adding file : {0}", file.Name);
fileList.Add(file.Name);
}
}
但仍在寻找其他好方法
答案 0 :(得分:0)
可以更改第二个循环。取而代之的是,您可以使用前缀字典来检查数组。这样可以减少查找时间。
答案 1 :(得分:0)
不确定“优化”是什么意思,但是如果您不介意摆脱Console.WriteLine
行,则可以将方法减少为两行(略有不同的是,下面的代码返回一个如果prefix
为null
,则为空列表,这与引发异常的原始方法不同;如果DirectoryEntryType.FILE
为{,则可以将其修改为返回所有prefix
类型{1}},具体取决于所需的行为):
null