Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML与.NET内置代码还是从文件读取?_C#_Asp.net_.net_Xml_Vb.net - Fatal编程技术网

C# XML与.NET内置代码还是从文件读取?

C# XML与.NET内置代码还是从文件读取?,c#,asp.net,.net,xml,vb.net,C#,Asp.net,.net,Xml,Vb.net,我正在构建一个web应用程序,它将使用第三方图表组件生成图表。此图表组件要求它接收包含设计参数和数据的XML文件,以便呈现图表。应用程序可以在每页视图中呈现多达10到20个图表。我正在寻找最有效的处理方法的建议 我需要加载XML模板,其中大约有15-20个,每个图表类型定义一个。加载模板后,我将添加特定于图表的数据,并将其发送到图表组件进行渲染。一些可能的处理方法包括-> 使用StringBuilder在代码中构建每个XML模板 使用一个.NET XML类在代码中构建每个XML模板 将每个XML

我正在构建一个web应用程序,它将使用第三方图表组件生成图表。此图表组件要求它接收包含设计参数和数据的XML文件,以便呈现图表。应用程序可以在每页视图中呈现多达10到20个图表。我正在寻找最有效的处理方法的建议

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

  • 使用StringBuilder在代码中构建每个XML模板
  • 使用一个.NET XML类在代码中构建每个XML模板
  • 将每个XML模板存储在一个文件中,根据需要从磁盘加载
  • 将每个XML模板存储在一个文件中,并在应用程序启动时一次性加载它们
  • 将XML模板存储在文件中将大大简化我的开发过程,但我不知道我会受到什么样的性能影响,特别是如果我不断从磁盘上读取它们的话。看起来选择4是更好的方式,但我不太确定实现该解决方案的最佳实践方式


    所以。。有什么想法吗?

    我确信您可以告诉编译器将这些XML文件捆绑到您的CLR exe中。阅读这些内容并不意味着性能会受到明显的影响,因为它们已经在内存中了。你需要研究一下,因为我现在想不出代码,太困了

    编辑

    -关于该主题的更多信息


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

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


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

    我只是想尝试一下,但我会将模板保存为一个常量,就像这样,然后使用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); 
    
    const字符串cChart1=@”
    {0}
    {2}
    {3}
    {4}
    ";
    XmlDocument xmlChart1=新的XmlDocument();
    LoadXML(String.format(cChart1,somevalue1,somevalue2,somevalue3,somevalue4,somevalue5));
    3rdPartyChartComponent cc=新的3rdPartyChartComponent(xmlChart1);
    
    谢谢大家的建议

    我创建了一个测试应用程序,对每个建议的方法进行x次试验,以查看哪种方法表现最好。事实证明,直接使用StringBuilder构建XML字符串的速度要快几个数量级,这并不令人惊讶

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


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

    是的,它们将在多个地方多次使用。不过,我希望尽可能避免在代码中构建XML,因为将模板存储在从组件的示例页面复制/粘贴的文件中会容易得多。我不是想偷懒,我只是不想为自己创造一堆额外的工作,除非这会带来显著的性能优势。谢谢你的建议,我会调查这条路线。