2

アイテムのリストを保存するカスタム構成セクションを作成しました。構成は次のとおりです。

<configSections>
    <section name="Items" type="namespace.Items, namespace"/>
</configSections>
<Items>
    <Item name="Item1"/>
    <Item name="Item2"/>
</Items>

また、次のように独自の構成ハンドラーを作成しました。

public class ItemConfigurationHandler : IConfigurationSectionHandler
{
    public ItemConfigurationHandler()
    {
    }

    public object Create(object parent, object configContext, System.Xml.XmlNode section)
    {
        List<Item> items = new List<Item>();
        System.Xml.XmlNodeList items = section.SelectNodes("Item");

        foreach (XmlNode i in items)
        {
            Item item = new Item();
            item.Name = i.Attributes["name"].InnerText;
            items.Add(item);
        }

        return items;
    }
}

これは現在正常に機能しており、次のように構成からアイテムのリストを取得できます。

List<Item> ts = (List<Item>)ConfigurationManager.GetSection("Items");

疑問に思っていますが、単一のアイテムだけを取得することは可能ですか? たとえば、「Item1」のみの詳細が必要な場合。リストを正常に取得してから、 name = "Item1" でフィルター処理できますが、これはすべての XML をロードすることを意味します。リストから 1 つのアイテムのみが必要な場合、特にこのリストが大きくなると、20 個のアイテムをロードしたくありません。必要なのは 1 つだけですか、それともあまり問題になりませんか?

4

2 に答える 2

2

それは大きな問題ではないと思います.1 対 20 をロードしても、XML 構成をネストしていない限り、今日のマシンではブリップは見られません。

ConfigurationManagerも値をキャッシュするため、config セクションをクエリすると、後続のリクエストのためにメモリに残ります。を使用ConfigurationManager.RefreshSection("Items")してキャッシュを更新できます。

于 2012-08-10T14:09:47.593 に答える
2

これらのアイテムを に保管する必要がある理由はありますweb.configか? このweb.configファイルは、概念的には構成設定用です。このファイルをプログラムで読み書きする予定がある場合、独自のカスタムxml ファイルにデータを保存し、そこからデータを解析できますか?

編集: あなたのコメントは、これらの項目を web.config に保持したいことを示唆しているため、リスト全体を取得して反復して必要な値を見つけることが大きな問題になるとは思いません。タグに値を追加して、<appSettings>個別にアクセスすることもできます。

例えば:

<appSettings>
    <add key="item1" value="item1 value"/>
    <add key="item2" value="item2 value"/>
     . . .
    <add key="item20" value="item20 value"/>
</appSettings>

次のようにアクセスします。

var item1Value = ConfigurationManager.AppSettings["item1"];

ただし、この情報だけを読んでいるのであれば、そもそも構成ファイルにそれらを入れようとしている理由がわかりません。コード内でこれらの変数を定義する方が簡単かもしれません。

于 2012-08-10T14:05:57.927 に答える