1

ASP.NETアプリケーションはxmlファイルを読み取り、現在の環境(ローカル、開発、本番など)を判別します。

アプリケーション設定から取得する接続文字列を知るために、データベースへの接続を開くたびにこのファイルをチェックします。

効率が気になる開発段階に入っています。データベースにアクセスしたいときに(非常に頻繁に)物理ディスク上のファイルを読み取る必要があるのは良い考えではないと思います。

Application["ConnectionString"]に接続文字列を保存することを検討していました。したがって、コードは次のようになります

public static string GetConnectionString
        {
            if (Application["ConnectionString"] == null)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(HttpContext.Current.Request.PhysicalApplicationPath + "bin/ServerEnvironment.xml");
                XmlElement xe = (XmlElement) xnl[0];

                switch (xe.InnerText.ToString().ToLower())
                {
                    case "local":
                        connString = Settings.Default.ConnectionStringLocal;
                        break;

                    case "development":
                        connString = Settings.Default.ConnectionStringDevelopment;
                        break;

                    case "production":
                        connString = Settings.Default.ConnectionStringProduction;
                        break;

                    default:
                        throw new Exception("no connection string defined");
                }
                Application["ConnectionString"] = connString; 
            }
            return Application["ConnectionString"].ToString();
        }

私はアプリケーションを設計しなかったので、毎回xmlファイルを読み取る理由があったに違いないと思います(アプリケーションの実行中に設定を変更するためですか?)ここでは、内部動作の概念はほとんどありません。長所と短所は何ですか?上記の機能を実装することで、パフォーマンスが少し向上すると思いますか?

ありがとう

4

2 に答える 2

7

わお。それをゴミ箱に捨てます。

すべての.configファイル(webまたはapp.config)には、接続文字列専用のセクションがあり、これらはConfigurationManager.ConnectionStringsプロパティを使用して読み取ることができます。

ローカル環境とテスト環境では、次のように3つの接続文字列を設定するだけです。

<connectionStrings>
    <add name="default.local" connectionString="etc ..>
    <add name="default.test" connectionString="etc ..>
    <add name="default" connectionString="etc ..>
</connectionStrings>

構成ファイルの別の設定に基づいて、フェッチする接続攪拌を決定します。小さなユーティリティ関数は、この情報を利用して正しい接続文字列を選択します。

このように、構成ファイルは、環境設定を除いて、さまざまなデプロイメント間で同じままです。

編集:これらの値がメモリにキャッシュされ、変更されるとアプリが再起動することを忘れました(問題になる可能性があり、役立つ場合があります)ConfigurationManagerクラスを介して.configファイルに直接アクセスするとパフォーマンスはまったく問題ありません。

于 2010-04-09T12:05:02.450 に答える
3

私はジェームズ・ウェストゲートに完全に同意します。web.configを使用する場合は、この問題に注意する必要はありません。

何らかの理由でweb.configを使用できない場合は、アプローチが正しいと言えます。回避しているアプリケーションストレージに値を保存すると、ディスクから接続文字列を何度も読み取ることができなくなります。

接続文字列を変更する必要がある場合は、アプリケーションを再起動する必要があります。接続文字列は毎日変更されることは想定されていないため、これは問題にはなりません。

ところで:私はあなたがどの環境にいるのかを尋ねる論理はあまり好きではありません。それはまったく必要ないはずです...

于 2010-04-09T12:29:39.480 に答える