使用 TPL 时使用 .net 静态路径类是否安全

本文关键字:路径 是否 安全 静态 net TPL 使用 | 更新日期: 2023-09-27 18:33:51

在并行运行的方法中使用Path.GetFileName()Path.GetFileNameWithoutExtension()是否安全?

前任:

我有以下

var test = files.AsParallel().Select(x => this.MatchFileDirectory(x, dirs));

MatchFileDirectory里面我会打电话给Path.GetFileName().性能有什么缺点吗?

使用 TPL 时使用 .net 静态路径类是否安全

不,在Task内使用它没有任何缺点。除非您可能期望,否则它甚至不执行任何磁盘 IO 操作,它只是一个没有任何外部需求的全 .NET 方法。所以没什么可担心的。

查看来源:

public static String GetFileName(String path) {
  if (path != null) {
        CheckInvalidPathChars(path);
        int length = path.Length;
        for (int i = length; --i >= 0;) {
            char ch = path[i];
            if (ch == DirectorySeparatorChar || ch == AltDirectorySeparatorChar || ch == VolumeSeparatorChar)
                return path.Substring(i + 1, length - i - 1);
        }
    }
    return path;
}
在这种情况下,

您是完全安全的 - 您传递给该方法的字符串内容是不可变的,因此无法更改,并且Path.GetFileName()方法调用是确定性的,没有副作用:

Path 类的大多数成员不与文件系统交互,也不验证路径字符串指定的文件是否存在。修改路径字符串的路径类成员(如 ChangeExtension)对文件系统中的文件名没有影响。