1

我正在构建一个 Web 应用程序,它将使用 3rd 方图表组件生成图表和图形。此图表组件需要接收包含设计参数和数据的 XML 文件才能呈现图表。该应用程序可以为每个页面视图呈现多达 10 到 20 个图表。我正在寻找解决此问题的最有效方法的建议。

我需要加载 XML 模板,其中大约有 15-20 个,每个图表类型定义一个。加载模板后,我将添加图表特定数据并将其发送到图表组件进行渲染。我想到的一些可能的处理方法包括 ->

  1. 使用 StringBuilder 在代码中构建每个 XML 模板
  2. 使用 .NET XML 类之一在代码中构建每个 XML 模板
  3. 将每个 XML 模板存储在一个文件中,按需从磁盘加载
  4. 将每个 XML 模板存储在一个文件中,在应用程序启动时一次性加载它们

将 XML 模板存储在文件中将大大简化我的开发过程,但我不知道我会受到什么样的性能影响,尤其是如果我不断地从磁盘读取它们。似乎选项 4 会是更好的方法,但我不太确定实施该解决方案的最佳实践方法。

所以..有什么想法吗?

4

4 回答 4

1

我只是在尝试一下,但我会将模板保存到一个常量中,然后使用 string.format 替换任何值并转换为 XML 文件并将其传递给第 3 方组件。

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 中,这是最快的方法之一。

于 2013-02-01T17:43:04.137 回答
0

我很确定您可以告诉编译器将这些 XML 文件捆绑到您的 CLR exe 中。从这些中读取并不意味着明显的性能影响,因为它们已经在内存中。您需要进行一些研究,因为我现在无法将代码从脑海中清除,太困了。

编辑。

http://msdn.microsoft.com/en-us/library/f45fce5x(v=vs.100).aspx - 有关该主题的更多信息。

使用这种方法的另一个好处是 CLR 可以保证这些文件的可读性和存在性,否则您的可执行文件将损坏并且无法运行。

于 2013-02-01T03:36:59.980 回答
0

是否多次使用相同的模板?您可以将模板存储为静态变量。然后添加一个构建模板的属性获取器(我可能会使用你的#2),如果它还没有被创建,然后返回它。

这会在第一次使用模板时对性能造成影响,之后会非常快。

于 2013-02-01T03:37:50.140 回答