【问题标题】:XML with .NET - Build in code or read from a file?XML 与 .NET - 构建代码还是从文件中读取?
【发布时间】:2013-02-01 03:32:32
【问题描述】:

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

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

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

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

那么..有什么想法吗?

【问题讨论】:

    标签: c# asp.net .net xml vb.net


    【解决方案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); 
    

    【讨论】:

      【解决方案2】:

      感谢大家的建议。

      我创建了一个测试应用程序,该应用程序针对每种建议的方法运行 x 次试验,以查看哪种方法表现最佳。事实证明,直接使用 StringBuilder 构建 XML 字符串的速度要快几个数量级,这不足为奇。

      以任何方式涉及 XmlDocument 都会大大降低性能。应该注意的是,我的结果是基于对每种方法运行数千次试验...但在实际意义上,我认为这些方法中的任何一种都足够快,可以正确完成工作。

      当然,使用 StringBuilder 构建所有东西有点麻烦。我喜欢 Jarealist 的建议,它看起来更容易,如果我将 XML 作为字符串处理而不是将其加载到 XmlDocument 中,这是最快的方法之一。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 是的,它们都将在多个地方多次使用。不过,我有点希望避免在代码中构建 XML,因为将模板存储在从组件的示例页面复制/粘贴的文件中会容易得多。我不想偷懒,我只是不想为自己创造一堆额外的工作,除非它会带来显着的性能优势。
        【解决方案4】:

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

        编辑。

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

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

        【讨论】:

        • 感谢您的建议,我会调查那条路线。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-10
        • 1970-01-01
        • 2011-07-06
        • 2011-03-11
        相关资源
        最近更新 更多