【问题标题】:is it safe to use .net static Path class when using TPL?使用 TPL 时使用 .net 静态路径类是否安全?
【发布时间】:2014-12-09 13:07:26
【问题描述】:

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

例如:

我有以下

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

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

【问题讨论】:

标签: c# asp.net .net c#-4.0 c#-5.0


【解决方案1】:

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

查看source

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;
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 2020-12-11
      • 2019-01-24
      • 2018-06-30
      • 2021-12-13
      • 1970-01-01
      • 2011-01-31
      • 2012-10-16
      相关资源
      最近更新 更多