C# XML与.NET内置代码还是从文件读取?
我正在构建一个web应用程序,它将使用第三方图表组件生成图表。此图表组件要求它接收包含设计参数和数据的XML文件,以便呈现图表。应用程序可以在每页视图中呈现多达10到20个图表。我正在寻找最有效的处理方法的建议 我需要加载XML模板,其中大约有15-20个,每个图表类型定义一个。加载模板后,我将添加特定于图表的数据,并将其发送到图表组件进行渲染。一些可能的处理方法包括->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
所以。。有什么想法吗?我确信您可以告诉编译器将这些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,因为将模板存储在从组件的示例页面复制/粘贴的文件中会容易得多。我不是想偷懒,我只是不想为自己创造一堆额外的工作,除非这会带来显著的性能优势。谢谢你的建议,我会调查这条路线。