4

私はWindowsPhone7アプリに取り組んでいますが、ディレクトリを作成する前にディレクトリが存在するかどうかを確認する必要があるかどうか、および作成する/しないことの長所/短所について、誰かが決定的な答えを持っているかどうか疑問に思いました。 。私が知る限り、コードをステップスルーすることから、次の2つのコードブロックは同じように機能します。

        using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {                
            //ensure directory exists
            String sDirectory = System.IO.Path.GetDirectoryName(sPath);
            if (!appStorage.DirectoryExists(sDirectory))
            {
                appStorage.CreateDirectory(sDirectory);
            }
        }

        using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {                
            //ensure directory exists
            String sDirectory = System.IO.Path.GetDirectoryName(sPath);
            appStorage.CreateDirectory(sDirectory);

        }

コードの2番目のブロックを使用しても安全ですか?ディレクトリがすでに存在する場合は例外をスローしないようであり、ディレクトリの内容をそのままにしておくようにも見えました。

4

2 に答える 2

4

は内部でIsolatedStorageFile.CreateDirectory呼び出します。州Directory.CreateDirectory文書Directory.CreateDirectory

ディレクトリがすでに存在する場合、このメソッドは何もしません。

つまり、そのディレクトリが存在するかどうかを確認する必要はありません。メソッドはすでにそれを行います。

于 2010-09-20T12:31:28.837 に答える
1

CreateDirectroryディレクトリがすでに存在するかどうか、または例外を飲み込んでいるかどうかを内部的にチェックしているのではないかと思います。DirectoryExistsいずれにせよ、事前に明示的に呼び出すことで、パフォーマンス上のわずかなメリットが得られる可能性があります。

確実にテストする方法は、多数のディレクトリを作成して2つの方法のパフォーマンスをベンチマークすることです。(これを試す場合は、親ディレクトリに16kを超えるディレクトリを含めることはできず、18(私は思う)ディレクトリを超えることはできないことに注意してください。)

自分がしていることを明確にすることをお勧めします。コードを見た他の開発者が、ディレクトリを作成する前に存在をテストしていないことを尋ねてくれることを願っています。特に、このコードが何度も呼び出された場合。テストしてパフォーマンスに違いがない場合は、コードにコメントを付けてこれを示すことをお勧めします。

于 2010-09-20T12:31:38.207 に答える