トップ回答者
System.IO.FileInfo について

質問
回答
-
挙げられたKBの場合、数千個のFindFirstChangeNotification()(FileSystemWatcher)を開いていることも条件に含まれていますが、該当するのでしょうか? それ自体も効率の悪い行為に見受けられますので、FindFirstChangeNotification()を減らすことをお勧めします。
その上で、FileInfoの挙動についてGetFileAttributeEx()を呼ぶかどうかは単純には言えず
- .NET 4以降を使用していて
- DirectoryInfo.GetFiles()又はDirectoryInfo.EnumerateFiles()で得られたFileInfo
の場合、ドキュメントにもありますがある程度のプロパティの値はあらかじめ格納されているので、GetFileAttributeEx()を呼ばずに済むこともあります。
- 回答としてマーク Y.Temmyo 2014年4月2日 10:00
すべての返信
-
挙げられたKBの場合、数千個のFindFirstChangeNotification()(FileSystemWatcher)を開いていることも条件に含まれていますが、該当するのでしょうか? それ自体も効率の悪い行為に見受けられますので、FindFirstChangeNotification()を減らすことをお勧めします。
その上で、FileInfoの挙動についてGetFileAttributeEx()を呼ぶかどうかは単純には言えず
- .NET 4以降を使用していて
- DirectoryInfo.GetFiles()又はDirectoryInfo.EnumerateFiles()で得られたFileInfo
の場合、ドキュメントにもありますがある程度のプロパティの値はあらかじめ格納されているので、GetFileAttributeEx()を呼ばずに済むこともあります。
- 回答としてマーク Y.Temmyo 2014年4月2日 10:00
-
-
Visual Studio では確認できるかどうかは知りませんが。。。
WinDBG を使ってデバッグすれば、該当の処理で GetFileAttributeEx() がコールされるかを確認することができます。
具体的には、WinDBG を起動し、デバッグ対象のプロセスにアタッチさせ、シンボル情報を合わせた後、以下の関数にブレーク ポイントをセットし、ブレーク ポイントにヒットしたタイミングで、そのコールスタックをチェックすれば、System.IO.FileInfo の Attribute プロパティで GetFileAttributeEx() がコールされるか確認できます。--------------------------------------------
<ブレーク ポイントを設定する場所>
KERNEL32!GetFileAttributesExA
KERNEL32!GetFileAttributesExW
KERNELBASE!GetFileAttributesExA
KERNELBASE!GetFileAttributesExW
-------------------------------------------- -
そういう観点ですと、以前から.NET Frameworkのソースコードは以前から公開されていて、最近ですとリンクも貼りやすくなり検索結果に出現するようになり始めてい増す。
などを見ることができ、今回であれば、条件によってはFileSystemInfo.Attributesの先、File.FillAttributeInfo()の中で呼び出される可能性があることがわかります。