2014-12-09 21 views
-1

在并行运行的方法中使用Path.GetFileName()Path.GetFileNameWithoutExtension()安全吗?使用.net静态路径类时使用TPL是否安全?

例如:

我有以下

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

和内部MatchFileDirectory我会打电话Path.GetFileName()。性能有什么缺点?

+0

您是否阅读过文档:http://msdn.microsoft.com/en-us/library/system.io.path.getfilename%28v=vs.110%29.aspx http:// msdn。 microsoft.com/en-us/library/System.IO.Path(v=vs.110).aspx – 2014-12-09 13:11:25

+5

微软有一个[标准blurb](http://msdn.microsoft.com/en-us/library/system .io.path(v = vs.110).aspx#threadSafetyToggle)'public static'成员是线程安全的,包括'Path'。 – StuartLC 2014-12-09 13:12:21

+0

而下一个“我从来没有读过文档”的问题。很明显,就在那里。线程安全性是为每个班级确定的。 – TomTom 2014-12-09 13:15:35

回答

2

不,在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; 
} 
1

在这种情况下,你是绝对安全的 - 要传递给该方法的字符串内容是不变的,从而不能被改变,并且Path.GetFileName()方法调用是确定的,具有没有副作用:

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

相关问题