是否值得用Path.GetFileName()替换FileInfo.Name()?

时间:2016-09-30 17:51:38

标签: c# fileinfo

对我继承的应用程序进行一些修改,并且在很多地方原始代码使用它来获取没有路径的文件的名称:

$_GET["var"]

无需检查文件是否存在或访问实际文件的任何其他属性,只需要提取完整路径的名称部分。

这不是一个实时应用程序,但它的性能非常重要。我仍然在学习.NET框架和C#,并且我认为创建string filename = "C:\path\to\abc.xyz"; FileInfo fi = new FileInfo(filename); string newfilename = Path.Combine(otherpath, fi.Name); FileInfo对象会产生一些开销,这些开销在运行时依赖于操作系统的IO负载。

我的第一步是将其转变为:

DirectoryInfo

有许多行使用相同的原始代码。我对这段代码的关注是依赖于IO建立的吗?我假设我的更改会消除这种依赖性,我是否正确?

1 个答案:

答案 0 :(得分:1)

  

用Path.GetFileName()替换FileInfo.Name()是否值得?

您必须根据您的申请来判断。我们不知道这些呼叫在您的关键路径中发生了多少次,以及性能的提升是否值得任何好处。

  

我对这段代码的关注是依赖于IO建立的吗?假设我的更改会消除这种依赖性,我是否正确?

在进行多个需要Fileinfo的调用时,使用File优于使用等效的stat方法,因为stat信息将缓存在{FileInfo中1}}第一次调用的对象。在你的情况下,你不做任何stat所以没有这样的" I / O"高架。但是当你使用FileInfo它会进行一些安全检查(注册表访问,dll加载等) - 所以你将有这个开销。 Path.GetFileName几乎是字符串操作的抽象,所以它没有任何这样的开销,而且会更快。

如果我是你,并且有足够的时间和FileInfo致电Path.GetFileName,我会这样做。对我来说(这是主观的),Path.GetFileName电话很多,而且#34;更清洁"