2016-09-30 6 views
1

、および多くの場所で元のコードは、パスなしでファイル名を取得するために、これを使用しています。FileInfo.Name()をPath.GetFileName()に置き換える価値はありますか?私は継承されたアプリケーションにいくつかの変更を加える

string filename = "C:\path\to\abc.xyz"; 
FileInfo fi = new FileInfo(filename); 
string newfilename = Path.Combine(otherpath, fi.Name); 

ファイルかどうかをチェックする必要はありませんまたは実際のファイルの他のプロパティにアクセスする場合、フルパスの名前部分を抽出する必要があります。

これはリアルタイムアプリではありませんが、パフォーマンスは重要です。私はまだ.NETフレームワークとC#を学んでおり、FileInfoDirectoryInfoオブジェクトの作成には、実行時にOSのIO負荷に依存するオーバーヘッドがあるという印象を受けています。同じ元のコードが使用される線の数十があり

string newfilename = Path.Combine(otherpath, Path.GetFileName(filename)); 

私の最初の動きは、中にそれを回すことでした。このコードの私の懸念は、創設されたIOに依存しているのですか?私の変更によってその依存関係が解消されるという前提で正しいのですか?

+3

うわー、もういくらか嫌いです。あなた、何が問題なの? – ajeh

+0

_Impressions_は簡単に確認または拒否することができます_measure_ – Steve

+1

^翻訳:どうやって両方の方法で試して、実行に時間がかかるかを確認するためにいくつかのテストを実行してみませんか? –

答えて

1

FileInfo.Name()をPath.GetFileName()に置き換える価値はありますか?

あなたのアプリケーションに基づいて判断する必要があります。私たちはあなたのクリティカルパスでこれらの呼び出しが何度起こったのか、パフォーマンスの向上が何らかの利益をもたらす価値があるかどうかわかりません。

私は、このコードがIOに依存していることに気づいていますが、私の変更によってその依存関係が解消されるという前提で正しいのですか? Fileinfoを使用して

stat情報は、最初の呼び出しでFileInfoオブジェクト内にキャッシュされるので、statを必要とする複数のコールを作るときと同等File方法を使用するよりも優れています。あなたの場合、statを実行しないので、そのような「I/O」オーバーヘッドはありません。しかし、FileInfoを使用すると、セキュリティチェック(レジストリアクセス、dllロードなど)が行われるため、そのオーバーヘッドが発生します。 Path.GetFileNameは文字列操作の抽象であるため、このようなオーバーヘッドはなく、高速になります。

私があなたであり、贅沢と時間をFileInfoからPath.GetFileNameに変更した場合、私はそれをやります。私にとって(そしてこれは主観的です)、Path.GetFileNameコールはたくさん「きれいに」なります

関連する問題