public static FileExtension GetFileExtension(string path) { var Extension = System.IO.Path.GetExtension(path).TrimStart('.'); if (string.IsNullOrEmpty(Extension)) { return FileExtension.Folder; } if (Enum.TryParse<FileExtension>(Extension, true, out var extension)) { return extension; } return FileExtension.Other; }这段代码vs执行20w次,程序耗时4s,为什么会耗时这么久,有什么办法优化吗
时间: 2024-02-10 09:27:03 浏览: 47
这段代码在执行20万次时,耗时4秒的原因可能是由于频繁的文件路径处理和字符串操作导致的性能问题。为了优化这段代码,你可以考虑以下几个方面:
1. 缓存文件扩展名:在循环中,每次调用`System.IO.Path.GetExtension`方法都会进行路径解析和字符串Trim操作。你可以考虑在循环外部获取所有文件的扩展名,并将其缓存起来。这样可以避免重复的路径解析和字符串操作,提高性能。
2. 使用字典进行扩展名映射:你的代码尝试使用`Enum.TryParse`方法将扩展名转换为枚举类型。但是这个转换过程是比较耗时的。你可以考虑使用字典来建立扩展名到枚举类型的映射关系,这样可以更快速地获取扩展名对应的枚举值。
下面是优化后的代码示例:
```csharp
public static FileExtension GetFileExtension(string path)
{
var extensions = new Dictionary<string, FileExtension>
{
{ "folder", FileExtension.Folder }, // 设置文件夹的扩展名映射
// 添加其他扩展名和对应的枚举值
{ "txt", FileExtension.Txt },
{ "jpg", FileExtension.Jpg },
// ...
};
var extension = System.IO.Path.GetExtension(path).TrimStart('.');
if (string.IsNullOrEmpty(extension))
{
return FileExtension.Folder;
}
if (extensions.TryGetValue(extension, out var fileExtension))
{
return fileExtension;
}
return FileExtension.Other;
}
```
通过上述优化,可以减少重复的路径解析和字符串操作,并且使用字典进行快速查找。这样应该能够提高代码的执行效率。你可以尝试使用优化后的代码并重新测试性能。