C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

DriveInfo.IsReadyの処理が遅い

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■100855 / inTopicNo.1)  DriveInfo.IsReadyの処理が遅い
  
□投稿者/ ゆうたろう (8回)-(2022/11/08(Tue) 09:41:22)

分類:[.NET 全般] 

お世話になっております。

当方VS2015のVBを使って、VS2008の作成物をアップデートしています。

データファイルの検索時に、ドライブ選択をしてもらうのですが、
下記を用いて、有効なドライブのみ選択候補に表示するようになっています。

For Each driveInfo As System.IO.DriveInfo In System.IO.DriveInfo.GetDrives()
If driveInfo.IsReady Then 〜〜〜

ですが、あらかじめネットワークドライブにデータを割り当てドライブ選択し、
その後LANケーブルを抜くなどしてから接続できない状態でドライブ選択を押すと、
IsReadyの処理だけで、約30秒ほどかかってしまいます。

「しばらくお待ちください」の表示等でお茶を濁そうと思っていたのですが、
前のVerだと、数秒程で処理が終わることが発覚しました。

運用環境、機体スペックは全く同じで、周辺のソースコードも変わってないのですが、
考えられる原因としては、やはりVSのバージョンアップの問題でしょうか?

拙い説明で申し訳ありませんが、
何か考えうることがあればご助言いただきたいです。
引用返信 編集キー/
■100856 / inTopicNo.2)  Re[1]: DriveInfo.IsReadyの処理が遅い
□投稿者/ 魔界の仮面弁士 (3485回)-(2022/11/08(Tue) 13:59:10)
No100855 (ゆうたろう さん) に返信
> 運用環境、機体スペックは全く同じで、周辺のソースコードも変わってないのですが、
正直、理由に心当たりが無いのですが、たとえばアンチウィルスソフトウェア等による実行時検査によって、
新しい方の実行ファイルからのネットワークアクセスが阻害されてしまっている…といった可能性は無いでしょうか。

調査する気力があるのなら、プロセス モニター等を使って、
新旧それぞれの処理で、何か違いが無いか記録してみるとか。
https://learn.microsoft.com/ja-jp/sysinternals/downloads/procmon


> 当方VS2015のVBを使って、VS2008の作成物をアップデートしています。
2008 当時のターゲットフレームワークとして使っていたのは
 本命 .NET Framework 3.5
 対抗 .NET Framework 2.0
  穴 .NET Framework 3.0
 大穴 .NET Compact Framework 3.5
のいずれかでしょうね。

2015 で利用されているターゲットフレームワークは何でしょうか?
対応している .NET Framework は 2.0〜4.7.2 の範囲のはず。


> If driveInfo.IsReady Then
DriveInfo クラスの IsReady プロパティの実装を追ってみたのですが、
2.0 世代と 4.8 世代を見比べても、IsReady そのものの実装に違いは見つけられませんでした。

最終的には GetFileAttributesEx API (それが駄目なら FillAttributeInfo API)を呼び出して、
WIN32_FILE_ATTRIBUTE_DATA 構造体の fileAttributes フラグに対して
FILE_ATTRIBUTE_DIRECTORY のビットフラグが立っているかどうかを調べているだけのようです。

.NET Framework 2.0 世代だと、「Windows 95 の場合は FindFirstFile API で代用する」という
if 判定のコードがありましたが(現行バージョンでは Win95 判定は行われていない)、
それ以外の差異は、今のところ見つけられていません。
引用返信 編集キー/
■100858 / inTopicNo.3)  Re[2]: DriveInfo.IsReadyの処理が遅い
□投稿者/ ゆうたろう (10回)-(2022/11/08(Tue) 17:13:46)
No100856 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士さん 
度々ありがとうございます

2008では.NET Framework 3.5
2015では4.5でした

正直何が何やらチンプンカンプンですが、
何かありましたらよろしくお願い致します。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ