2

さて、私はこの質問に対する答えを持っているように見えましたが、私は間違っていました。間違ったことを聞いたせいかもしれません。これが私がやりたいことです:私はxmlドキュメントを取り、それをメモリにプルしたいと思います。次に、自由に、そのドキュメントに対してクエリを実行し、そこから情報を取得したいと思います。ドキュメントをメモリに再度ロードせずにデータが必要なときはいつでもこれを実行したいと思います。結局のところ、重要なのは、データが必要になったときにディスクにぶつかるのをやめることです。私が使用してきた方法は1回しか機能せず、これを複数回実行する必要があります。これが私が試したコードです:

public static class GrabFile
    {
        public static XDocument configData = XDocument.Load(@"myxml.xml");
        public static XmlReader templateReader = configData.CreateReader();
    }

これでドキュメントがメモリにコピーされると思いました。これを使用すると、templateReaderを使用していつでもconfigDataをクエリできます。

while (GrabFile.templateReader.Reader())
{
  //get the data I wanted
}

私はそれをwhileステートメントに入れて、メソッドで特定のクエリを実行する他のステートメントを作成し、情報が必要なときにいつでもそれらを呼び出すことができると思いました。しかし、それは一度だけ機能します。

私が言ったように、私はこれにあまり精通していないので、おそらくそれを簡単に行う方法があります。

また、他のスレッドの人々は、xmlドキュメントにあるものの例を望んでいました。それは関係ありません。重要なのは、ドキュメントをメモリに入れて、ディスクからアクセスして別のリーダーを作成せずに、必要な回数だけクエリを実行したいということです。はい、これにはリーダーを使用したいと思います。

おそらく、メモリ内のファイル内のポインタを先頭に戻して、再度読み取る必要がありますか?

助けてくれてありがとう。

4

2 に答える 2

1

別のリーダーを作成したくないのはなぜですか?

GrabFile.configData.CreateReader()必要なときに電話をかけるだけが最も簡単な方法です。(ディスクから再度ロードされることはありませんが、呼び出すたびに個別に作成されます。)XmlReader

のドキュメントからXmlReader

XMLデータへの高速でキャッシュされていない転送専用アクセスを提供するリーダーを表します。

(エンファシスマイン。)リセットの周りには何も見えませんし、期待もしていません。

あなたが最初に情報を持っていることを考えると、とにかく、XDocumentかなり難しい作業を使用するのではなく、私は個人的にそれですべてのクエリを実行しようとしますが、明らかにそれはあなたの呼び出しです。XmlReaderただし、「これにあまり精通していない」と言うように、ある程度の正当性を示すと役立ちます。したがって、上位レベルのタスクが何であれ、どのように取り組んでいるかについての仮定を再検討する価値があります。

于 2012-07-27T16:37:05.220 に答える
0

ASP.NETアプリケーションのように、サーバー環境でこれを実行していますか?これにより、さらにいくつかの手順が導入される可能性がありますが、一般的な考え方は、静的オブジェクトを使用して、メモリにロードするXMLドキュメントを保持することです。あなたがしたように。そして、それが本当にすべてです。もう少しコンテキストを提供できますか?

また、XMLリーダーを実際に使用する必要はありません(そのような転送のみのアクセスのみが必要な場合を除く)。

public static class Globals
{
    public static XDocument ConfigFile = XDocument.Load("C:/somefile.xml");
}


public void SomeOtherFunctionSomewhere()
{
    var configName = Globals.ConfigFile
        .Descendants("someconfigsection")
        .Descendants("configName")
        .First().Value;
}

プログラムの構成をXMLファイルに保存する場合は、構成全体を、起動時に自分で作成したメモリ内オブジェクトに読み込むことを検討してください。これは、(XMLがすでにメモリにある場合でも)毎回XMLを照会するよりも、実行時に構成セクションにアクセスするためのさらに高速な方法になります。以下の考案された例:

public class Configuration
{
    //just some made up config settings
    public string Name {get;set;}
    public int Id {get;set;}
    public int XDimension {get;set;}
    public int YDimension {get;set;}
}

class Program
{
    static Configuration Config;
    static void Main(string[] args)
    {
        Config = ReadConfig();
    }

    private static Configuration ReadConfig()
    {
        var config = new Configuration();
        //read entire XML and set properties on the config object
        return config;
    }
}
于 2012-07-27T16:40:44.937 に答える