4

Nas 共有からいくつかのフォルダーを一覧表示し、フォルダーのプロパティを取得して、サブフォルダーを一覧表示します。アクセス権がないフォルダの場合、2 つの異なる例外が発生します

  1. System.UnauthorizedAccessException: パス「Z:\info」へのアクセスが拒否されました。
  2. System.IO.IOException: ネットワークパスが見つかりませんでした。

2 つ目はキャッチされるまでに時間がかかり、アプリケーションの速度が低下します。

私の質問は、一部の共有でネットワーク パスが見つからず、他の共有でアクセスが拒否されたのはなぜですか? 違いは何ですか?時間がかかる2番目の例外を回避するにはどうすればよいですか。

4

1 に答える 1

4

私の質問は、一部の共有でネットワーク パスが見つからず、他の共有でアクセスが拒否されたのはなぜですか? 違いは何ですか?

パスがすぐに見つかったが、許可がない場合は、UnauthorizedAccessExceptionすぐに を受け取ります。

ただし、システムがネットワーク共有が有効かどうかを検出しようとしている場合、これには時間がかかることがあります。ネットワーク パスがまったく有効でないと判断する前に、かなりの量のネットワーク アクセスを実行する必要があり、これには時間がかかる場合があります。

時間がかかる2番目の例外を回避するにはどうすればよいですか。

これを行う唯一の現実的な方法は、存在しない共有にアクセスしないことです。これは常に実用的であるとは限りません。実行時にそれらが存在するかどうかを判断する必要がある場合は、これが遅くなる可能性があるという事実を回避するように設計する必要があります。

ただし、これを改善する方法はたくさんあります。複数の共有をチェックしている場合は、これらのチェックを並行して行うことができます。これが本当に IO バウンドであることを考えると、すべての共有を順次ではなく同時にチェックできるため、スレッド化によってアプリケーションの全体的な応答性に大きな違いが生じる可能性があります。

于 2013-03-29T15:09:08.527 に答える