1

サードパーティのグラフ作成コンポーネントを使用してグラフやグラフを生成するWebアプリケーションを構築しています。このグラフ作成コンポーネントでは、グラフをレンダリングするために、設計パラメーターとデータを含むXMLファイルを受け取る必要があります。アプリケーションは、ページビューごとに最大10〜20のチャートをレンダリングできます。これを処理するための最も効率的な方法の提案を探しています。

XMLテンプレートをロードする必要があります。XMLテンプレートは、チャートタイプの定義ごとに1つずつ、約15〜20個あります。テンプレートが読み込まれたら、グラフ固有のデータを追加し、レンダリングのためにグラフ作成コンポーネントに送信します。私の頭のてっぺんからこれを処理するための可能な方法のいくつかは次のとおりです->

  1. StringBuilderを使用して、コードで各XMLテンプレートを作成します
  2. .NET XMLクラスの1つを使用して、コードで各XMLテンプレートを作成します
  3. 各XMLテンプレートをファイルに保存し、オンデマンドでディスクからロードします
  4. 各XMLテンプレートをファイルに保存し、アプリケーションの起動時に一度にすべてロードします

XMLテンプレートをファイルに保存すると、開発プロセスが大幅に簡素化されますが、特にディスクからテンプレートを継続的に読み取っている場合、どのようなパフォーマンスの低下が発生するかわかりません。オプション4の方が良い方法のようですが、そのソリューションを実装するためのベストプラクティスの方法はよくわかりません。

だから..そこに何か考えはありますか?

4

4 に答える 4

1

私はそれをクラックしているだけですが、テンプレートをそのような定数に保存してから、string.formatを使用して任意の値を置き換え、XMLファイルに変換して、サードパーティのコンポーネントに渡します。

const string cChart1 = @"<chart type='pie'>
    <total>{0}</total>
    <sections count={1}>
        <section>{2}</section>
        <section>{3}</section>
        <section>{4}</section>
    </section>
    </chart>";

    XmlDocument xmlChart1 = new XmlDocument();
    xmlChart1.LoadXML(String.format(cChart1, somevalue1, somevalue2, somevalue3, somevalue4, somevalue5));

    3rdPartyChartComponent cc = new 3rdPartyChartComponent(xmlChart1); 
于 2013-02-01T04:49:45.900 に答える
1

皆さんの提案に感謝します。

提案された各方法について x 回の試行を実行し、どの方法が最も効果的かを確認するテスト アプリケーションを作成しました。結局のところ、StringBuilder を使用して XML 文字列を直接構築する方が桁違いに速く、驚くことではありません。

何らかの方法で XmlDocument を使用すると、パフォーマンスが大幅に低下しました。私の結果は、各方法で何千もの試行を実行したことに基づいていることに注意してください...しかし、実際的な意味では、これらの方法はどれも、私の意見では、仕事を正しく行うのに十分高速です.

もちろん、StringBuilder を使用してすべてを構築するのは少し面倒です。私は Jarealist の提案が好きです。目にははるかに簡単です。XML を XmlDocument にロードするのではなく、全体を通して文字列として処理すると、最速の方法の 1 つになります。

于 2013-02-01T17:43:04.137 に答える
0

これらの XML ファイルを CLR exe 内にバンドルするようにコンパイラに指示できると確信しています。これらからの読み取りは、すでにメモリ内にあるため、顕著なパフォーマンスの低下を意味するものではありません。眠すぎてコードが頭から離れないので、少し調査する必要があります。

編集。

http://msdn.microsoft.com/en-us/library/f45fce5x(v=vs.100).aspx - この件に関する詳細情報。

このアプローチを使用するもう 1 つの利点は、CLR がこれらのファイルの読みやすさと存在を保証できることです。そうしないと、実行可能ファイルが破損して実行されなくなります。

于 2013-02-01T03:36:59.980 に答える
0

同じテンプレートが複数回使用されていますか? テンプレートを静的変数として保存できます。次に、テンプレートがまだ作成されていない場合は、テンプレートを作成するプロパティ ゲッターを追加し (おそらく #2 を使用します)、それを返します。

これにより、テンプレートが初めて使用されたときにパフォーマンスが低下し、その後は非常に高速になります。

于 2013-02-01T03:37:50.140 に答える