2005年03月27日
川俣晶の縁側ソフトウェア技術雑記total 30597 count

既にあるディレクトリにDirectory.CreateDirectoryするのと、Directory.Existsの存在チェックでは、どちらが速いか?

Written By: 川俣 晶連絡先

 .NET FrameworkのSystem.IO.Directory.CreateDirectoyメソッドは、漠然とした予測を裏切って、複数階層を一括で作ってくれたり、既にディレクトリが存在する場合は何もせずに戻ってきたりします。

 さて、ここで問題なのは、指定ディレクトリを作成したいが、既にある場合は何しないという機能をコーディングする場合です。

 機能面では、単に上記メソッドを呼ぶだけで実現できます。しかし、それが本当に最速でしょうか? 呼び出される回数が多い場合は、速度が気になります。たとえば、先にSystem.IO.Directory.Existsメソッドで存在チェックを行った方が速いということがありえるでしょうか?

 というわけで、.NET Framework 1.1上で以下のテストプログラムを実行して速度を比較してみました。

テストプログラム §

using System;

using System.IO;

namespace ConsoleApplication46

{

    class Class1

    {

        [STAThread]

        static void Main(string[] args)

        {

            string target = @"d:\delme\a\b\c\d\テスト\"

                + @"長い長い長い長い長い\"

                + @"名前名前名前名前名前名前名前名前";

            Directory.CreateDirectory(target);

            const int count = 100000;

            DateTime start1 = DateTime.Now;

            for(int i=0; i<count; i++ )

            {

                Directory.Exists(target);

            }

            DateTime end1 = DateTime.Now;

            TimeSpan span1 = end1.Subtract(start1);

            Console.WriteLine(span1);

            DateTime start2 = DateTime.Now;

            for(int i=0; i<count; i++ )

            {

                Directory.CreateDirectory(target);

            }

            DateTime end2 = DateTime.Now;

            TimeSpan span2 = end2.Subtract(start2);

            Console.WriteLine(span2);

        }

    }

}

結果 §

00:00:05.6382761

00:00:29.5033062

 というわけで、既にあるディレクトリに対して呼び出した場合、System.IO.Directory.Existsメソッドの方が数倍速く終わることが分かりました。

 呼び出し回数が多い場合、たとえ機能面でSystem.IO.Directory.CreateDirectoyメソッドが完全に期待通りの動作するとしても、先にSystem.IO.Directory.Existsメソッドを呼んで、既にある場合にはSystem.IO.Directory.CreateDirectoyメソッドを呼ばないようにする方が高速になるかもしれません。

Facebook

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20050327144238
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.