0

クエリ文字列を介して渡された条件に応じて、その場で XML フィードを作成する Web アプリケーションがあります。

これは非常に単純なアプリケーションです。クエリ文字列変数を読み取り、それらを使用してデータ (データベースからキャッシュされたデータ) を適切な XML 形式にフォーマットします。

返された XML ファイルは約 25 MB です...大量のデータがあります。

私は XmlTextWriter を使用して XML を構築し、それを「アプリケーション/オクテット ストリーム」としてリクエスタに返します。これはダウンロード可能な添付ファイルです。

質問: XML のビルドで CPU を 100% 使用しているようで、他のアプリケーションで問題が発生しています。

このような大きな XML ファイルを作成した経験のある人はいますか? プロセスの CPU 負荷を軽減するためのヒントはありますか?

コードサンプルは次のとおりです。

    map.WriteRaw("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            map.WriteStartElement("rss");
            map.WriteAttributeString("version", "2.0");
            map.WriteAttributeString("xmlns:g", "http://base.google.com/ns/1.0");
            map.WriteStartElement("channel");
            map.WriteElementString("link", "http://www.mywebsite.com...");

            ProductCollection items = Product.GetCachedSiteProducts();
            foreach (Product p in items)
            {
map.WriteStartElement("item");
........
                    map.WriteElementString("description", p.Description);
                    map.WriteElementString("g:id", p.SiteSku);
                    map.WriteElementString("g:condition", "new");
                    map.WriteElementString("g:price", p.Price.ToString() + " USD");
...............

                    map.WriteEndElement(); //item            
                }
            }
            map.WriteEndElement();//channel    
            map.WriteEndElement();//rss    
            Response.Write(sw.ToString());

更新:私は自分の質問に答えています..より多くのコードを投稿するように頼んだ人たちのおかげで、これはもっと注意深く見たときに簡単なものでした.

コードは「Response.write(map.ToString())」を使用して xml を出力していました。うーん、非効率です。コードを更新します。皆さんありがとう!

4

1 に答える 1

3

頭に浮かぶ差し迫った懸念の1つは、Response.Writer(sw.ToString())

これは、最初に書き込みを行ってから出力ストリームに送信しているように見えますがStringWriter、ここで出力ストリームに直接書き込んでみませんか?

それだけで CPU 使用率に大きな違いが生じたり、CPU 使用率が 100% になったりするとは思いません。

ProductCollectionループオーバーすると、それがCPU使用率が高い原因である可能性が最も高いようです。コードが適切に実行さIEnumerable<Product>れ、製品の JIT を取得している場合、永続的なストレージの製品を取得している場合 (たとえば、反復ごとにいくつかの独立したデータベース呼び出しが必要)、CPU 使用率が高くなる可能性があります。

さらにソース コードを見ないと、何が問題の原因であるかを判断するのは困難です。

于 2012-01-09T17:48:36.613 に答える