在并行运行的方法中使用Path.GetFileName()
或Path.GetFileNameWithoutExtension()
安全吗?使用.net静态路径类时使用TPL是否安全?
例如:
我有以下
var test = files.AsParallel().Select(x => this.MatchFileDirectory(x, dirs));
和内部MatchFileDirectory
我会打电话Path.GetFileName()
。性能有什么缺点?
在并行运行的方法中使用Path.GetFileName()
或Path.GetFileNameWithoutExtension()
安全吗?使用.net静态路径类时使用TPL是否安全?
例如:
我有以下
var test = files.AsParallel().Select(x => this.MatchFileDirectory(x, dirs));
和内部MatchFileDirectory
我会打电话Path.GetFileName()
。性能有什么缺点?
不,在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;
}
在这种情况下,你是绝对安全的 - 要传递给该方法的字符串内容是不变的,从而不能被改变,并且Path.GetFileName()
方法调用是确定的,具有没有副作用:
大多数Path类的成员不会与文件系统交互,也不会验证路径字符串指定的文件是否存在。修改路径字符串的路径类成员(如ChangeExtension)对文件系统中的文件名称没有影响。
您是否阅读过文档: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
微软有一个[标准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
而下一个“我从来没有读过文档”的问题。很明显,就在那里。线程安全性是为每个班级确定的。 – TomTom 2014-12-09 13:15:35