0

我很想知道哪种方法是最佳实践/有效的方法。我有一个方法,我有一个 OpenFileDialog。在那里,我必须在方法内的 5 个地方使用 Path.GetFileName(openFileDialog.FileName)。哪种方法最好:要么调用 GetFileName,要么将其保存在字符串变量中,然后使用该字符串变量?

" " + Path.GetFileName(openFileDialog.FileName) + " " 

string fileName = Path.GetFileName(openFileDialog.FileName);
" " + fileName + " "
4

5 回答 5

3

除了其他答案已经概述的可读性和维护方面的考虑之外,这个小程序将展示字符串存储选项的性能(很少)增益

void Main()
{
    string p = @"d:\temp\file.txt";
    string result;

    Stopwatch sw = new Stopwatch();
    sw.Start();
    for(int i = 0; i < 100000; i++)
    {
        result = " " + Path.GetFileName(p) + " ";
    }
    sw.Stop();
    Console.WriteLine("PathGetFileName:" + sw.Elapsed.ToString());
    sw = new Stopwatch();
    sw.Start();
    string file = Path.GetFileName(p);
    for(int i = 0; i < 100000; i++)
    {
        result = " " + file + " ";
    }
    sw.Stop();
    Console.WriteLine("string concat:" + sw.Elapsed.ToString());
}

结果:

PathGetFileName: 205632 

string concat: 65234 

当然,这是微优化,不应过多考虑。
在这种情况下,代码的可读性更为重要。

于 2013-03-21T09:18:13.190 回答
2

只需将结果存储Path.GetFileName在局部变量中。

它将减少代码的大小,更具可读性(如果变量具有有用的名称)并且会消耗更少的 CPU(即使您不会注意到任何差异)。

于 2013-03-21T09:12:26.487 回答
2

如果您在同一方法中的 5 个位置使用文件名,请使用局部变量fileName。这是可读的、高效的并且没有副作用。

如果您可能经常更改文件并且它是(公共)属性或字段 use Path.GetFileName(openFileDialog.FileName),否则该变量可能不是openFileDialog.

但是,比起在大多数情况下可以忽略不计的性能,更关心可读性和正常运行。

于 2013-03-21T09:14:09.173 回答
1

如果是相同的文件名(例如,用户只指定一次文件名),则将其保存到变量中。

将其保存到 astring更易于阅读、维护并且应该比调用对象的属性更快,因为您调用的是不可变引用类型。但是,我要指出,唯一真正的优势可能是它更容易阅读,因为计算时间可能在纸上有所不同,但我怀疑您的应用程序会显示出速度/性能方面的任何差异。

于 2013-03-21T09:11:31.023 回答
1

如果您计划在同一代码/范围块中重用文件名,则只需将其保存为字符串并根据需要引用。这不仅更具可读性,而且内存效率更高。例如

string fileName = Path.GetFileName(openFileDialog.FileName);
//Reference fileName as needed
于 2013-03-21T09:11:53.490 回答