对我继承的应用程序进行一些修改,并且在很多地方原始代码使用它来获取没有路径的文件的名称:
$_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建立的吗?我假设我的更改会消除这种依赖性,我是否正确?
答案 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;更清洁"