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

同じメソッド内でファイル名を 5 か所使用する場合は、ローカル変数を使用しますfileName。それは読みやすく、効率的で、副作用がありません。

ファイルを頻繁に変更する可能性があり、それが (パブリック) プロパティまたはフィールドで使用されている場合Path.GetFileName(openFileDialog.FileName)、そうでない場合、変数が の現在のファイル名ではない可能性がありますopenFileDialog

ただし、ほとんどの場合無視できるパフォーマンスよりも、読みやすさと適切な機能に注意してください。

于 2013-03-21T09:14:09.173 に答える
2

Path.GetFileName結果をローカル変数に格納するだけです。

これにより、コードのサイズが縮小され、読みやすくなり (変数に有用な名前が付けられている場合)、CPU の消費が少なくなります (違いに気付かなくても)。

于 2013-03-21T09:12:26.487 に答える
1

ファイル名が同じ場合 (たとえば、ユーザーがファイル名を 1 回だけ指定した場合)、それを変数に保存します。

に保存するstringと、不変の参照型を呼び出しているため、オブジェクトのプロパティを呼び出すよりも読みやすく、維持しやすく、高速になるはずです。ただし、唯一の本当の利点は、紙の上では計算時間が異なる可能性があるため、おそらく読みやすいことですが、アプリケーションで速度/パフォーマンスに違いが見られるとは思えません。

于 2013-03-21T09:11:31.023 に答える
1

コード/スコープの同じブロックでファイル名を再利用する予定がある場合は、それを文字列に保存し、必要に応じて参照してください。これにより、はるかに読みやすくなるだけでなく、メモリ効率も向上します。例えば

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