私は使用XmlReader ProductDoc = XmlReader.Create(path, settings);
していますが、ユーザーが検索ツールを使用するたびにディスクから読み取っているため、サーバーがダウンしているようです。
- XmlReader を呼び出すたびに、ディスク メモリが呼び出されるというのは本当ですか?
- もしそうなら、ディスクメモリではなくサーバーメモリからこれを行うにはどうすればよいですか
私は使用XmlReader ProductDoc = XmlReader.Create(path, settings);
していますが、ユーザーが検索ツールを使用するたびにディスクから読み取っているため、サーバーがダウンしているようです。
はい、コードはディスクから読み取ります。
サーバーのキャッシュにデータを入れる必要があるようです。これには、ドキュメントを XDocument または単なる生データとして読み取り、それを に配置することが含まれPage.Cache
ます。
これは本当ですか?
それがあなたのサーバーをダウンさせているのかどうかはわかりません. しかし、はい、少なくとも概念的には、毎回ディスクから読み取ります-ただし、ファイルが大量に読み取られている場合は、ファイルシステムがファイルをキャッシュすることを期待しています。
ディスクメモリではなくサーバーメモリからこれを行うにはどうすればよいですか
「ディスクからではなくメモリから」という意味で、常に同じパスである場合は、ドキュメントを一度メモリにロードすることをお勧めします。
XDocument doc = XDocument.Load(path);
...そして、それをすべてのリクエストで再利用します。あなたがそれから読むだけである限り、それは問題ないはずです. 必要に応じて、ドキュメントから新しいリーダーを作成することも、XDocument
直接使用することもできます (これはより簡単になる可能性があります)。XDocument
代わりに、必要に応じてからをロードできますXmlReader
。
使用
XmlReader.Create(Stream)
過負荷。次に、FileStream を使用してファイルの内容を MemoryStream に読み込み (1 回だけ!)、次に FileStream を強制終了して、単に MemoryStream を使用します。
xmlreaderを作成するたびに、ストリームの位置を0に設定することを忘れないでください。これは、一度に1 xmlreaderから読むことができるxmlreaderのみを意味します。
Web サーバー (asp.net) を実行している場合は、MemoryStream (Page.Cache) をキャッシュする必要があります。または、メモリ使用量がそれほどひどくない場合は、セッションでユーザーごとにキャッシュすることができます。セッションでは、複数のリーダー アクセスについても心配する必要はありません。