System.IO.DriveInfoでの値の取得について


Windows C#で次のようなコードを書いた場合に、以下の点がわかりません。

[code]

    System.IO.DriveInfo drive = new System.IO.DriveInfo("Z");
    if (drive.IsReady)
    {
    string s;
    s = string.Format("{0:f1} GB/{1:f1} GB", drive.TotalFreeSpace/1024 / 1024 / 1024, drive.TotalSize / 1024 / 1024 / 1024);
    //  以下略
    }
    
[/code]

これを1秒おきに実行した際

  1. どのようにして情報が取得されるのか(ディスクに都度アクセスするのか)
  2. アクセスするとした場合、寿命に影響があるのか
  3. 実際にどのようにして値を取得しているかを調べる方法があるのか
  4. 1秒おきに取得する方法以外の手段はあるのか
  5. このコードの問題点があれば教えてください




> 実際にどのようにして値を取得しているかを調べる方法があるのか

System.IO.DriveInfoの実装については、[driveinfo.cs](https://referencesource.microsoft.com/#mscorlib/system/io/driveinfo.cs,167)でわかります。  
`TotalFreeSpace`や`TotalSize`はWindows
APIの[GetDiskFreeSpaceEx](https://msdn.microsoft.com/ja-
jp/library/cc429308.aspx)を仕様しているようです。

`GetDiskFreeSpaceEx`がどのように情報を取得しているかは、APIのドキュメントからはわかりませんでした。詳細は
Microsoftのサポートに問いあわせると回答が得れるかもしれません。

