none
System.IO.FileInfo について RRS feed

  • 質問

  • System.IO.FileInfo の Attribute プロパティを使用すると、内部的には GetFileAttributeEx が実行されることになるのでしょうか。

    以下の情報によると、 特定の条件下で GetFileAttributeEx を実行するとパフォーマンスが著しく低下するという事ですが、 FileInfoのAttribute プロパティもこの影響を受けるかどうかを知りたいのです。

    http://support.microsoft.com/kb/2893634/ja


    よろしくお願いいたします。

    2014年4月2日 8:17

回答

  • 挙げられたKBの場合、数千個のFindFirstChangeNotification()(FileSystemWatcher)を開いていることも条件に含まれていますが、該当するのでしょうか? それ自体も効率の悪い行為に見受けられますので、FindFirstChangeNotification()を減らすことをお勧めします。

    その上で、FileInfoの挙動についてGetFileAttributeEx()を呼ぶかどうかは単純には言えず

    の場合、ドキュメントにもありますがある程度のプロパティの値はあらかじめ格納されているので、GetFileAttributeEx()を呼ばずに済むこともあります。

    • 回答としてマーク Y.Temmyo 2014年4月2日 10:00
    2014年4月2日 8:46

すべての返信

  • 挙げられたKBの場合、数千個のFindFirstChangeNotification()(FileSystemWatcher)を開いていることも条件に含まれていますが、該当するのでしょうか? それ自体も効率の悪い行為に見受けられますので、FindFirstChangeNotification()を減らすことをお勧めします。

    その上で、FileInfoの挙動についてGetFileAttributeEx()を呼ぶかどうかは単純には言えず

    の場合、ドキュメントにもありますがある程度のプロパティの値はあらかじめ格納されているので、GetFileAttributeEx()を呼ばずに済むこともあります。

    • 回答としてマーク Y.Temmyo 2014年4月2日 10:00
    2014年4月2日 8:46
  • 作成しているアプリケーション内で FindFirstChangeNotification は利用していませんが、他のアプリケーションで利用している可能性は否定できません。

    問題判別の為、投稿の通りの質問をさせていただきましたが、FileInfo は GetAttributeEx を実行するケースもあり得るという事で、今後の問題判別に役立たせていただきます。

    ご返信いただき、ありがとうございました。

    • 回答としてマーク Y.Temmyo 2014年4月2日 9:59
    • 回答としてマークされていない Y.Temmyo 2014年4月2日 10:00
    2014年4月2日 9:57
  • Visual Studio では確認できるかどうかは知りませんが。。。
    WinDBG を使ってデバッグすれば、該当の処理で GetFileAttributeEx() がコールされるかを確認することができます。
    具体的には、WinDBG を起動し、デバッグ対象のプロセスにアタッチさせ、シンボル情報を合わせた後、以下の関数にブレーク ポイントをセットし、ブレーク ポイントにヒットしたタイミングで、そのコールスタックをチェックすれば、System.IO.FileInfo の Attribute プロパティで GetFileAttributeEx() がコールされるか確認できます。

    --------------------------------------------
    <ブレーク ポイントを設定する場所>
    KERNEL32!GetFileAttributesExA
    KERNEL32!GetFileAttributesExW
    KERNELBASE!GetFileAttributesExA
    KERNELBASE!GetFileAttributesExW
    --------------------------------------------

    2014年4月2日 10:09
  • そういう観点ですと、以前から.NET Frameworkのソースコードは以前から公開されていて、最近ですとリンクも貼りやすくなり検索結果に出現するようになり始めてい増す。

    などを見ることができ、今回であれば、条件によってはFileSystemInfo.Attributesの先、File.FillAttributeInfo()の中で呼び出される可能性があることがわかります。

    2014年4月2日 11:02
  • なるほど、ソースが公開されているのですね。

    根拠を示していただき、ありがとうございました。

    2014年4月2日 14:03
  • ご回答ありがとうございます。

    WinDBGを使用したことはありませんがこれを機会に使用してみます。

    2014年4月2日 14:04