c# - 如何优化XML的书写方式?

标签 c# .net xml performance optimization

我只能使用.NET 2.0框架来创建XML文档(> 1000行)。

该文档的信息是从 Windows 注册表中检索的。 XML 是使用 2 个 for 循环编写的,在这些循环中我调用 3 个 .ToString() 方法来转换检索到的数据。

正如预期的那样,创建 XML 文档需要很长时间。我想知道我能做些什么来优化它。

public static void InitiateApp()
{
    const string regadd = "SOFTWARE" + "\\" +  "\\" + "Microsoft" + "\\" + "Windows NT" + "\\" +  "CurrentVersion" + "\\Fonts";
    RegistryKey regkey = Registry.LocalMachine.OpenSubKey(regadd);
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.CloseOutput = true;
    settings.Indent = true;
    settings.IndentChars = "\t";
    settings.NewLineChars = "\r\n";
    settings.NewLineOnAttributes = true;
    settings.OmitXmlDeclaration = true;
    XmlWriter w = XmlWriter.Create("c:\\out.xml",settings);
    foreach (FontFamily font in FontFamily.Families)
    {
        w.WriteStartElement("FontFamily");
        int keyCount = 0;
        foreach (string key in regkey.GetValueNames())
        {   
            if(regkey.GetValueNames()[keyCount].ToString().Contains(font.Name)) 
            {
                         w.WriteStartElement("FontName",regkey.GetValueNames()[keyCount].ToString());
                         w.WriteElementString("FontFile",regkey.GetValue(key).ToString());
             w.WriteEndElement();
            }
            keyCount++;
        }
        w.WriteEndElement();
    }
    w.Flush();
}

最佳答案

将对 GetValueNames 的多次调用移出循环并初始化一个字符串数组。这至少会带来一些小的改进。

string[] vals = regkey.GetValueNames();
XmlWriter w = XmlWriter.Create("c:\\out.xml",settings); 
foreach (Xtype a in all_a) 
{
    w.WriteStartElement("newElement");     
    int keyCount = 0;     
    foreach (YType b in all_b)     
    {            
         if(vals[keyCount].ToString().Contains(a.name))          
         {
             w.WriteStartElement("a_name",vals[keyCount].ToString());                  
             w.WriteElementString("b_name",regkey.GetValue(key).ToString());             
             w.WriteEndElement();
          }

关于c# - 如何优化XML的书写方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445659/

相关文章:

java - Java中如何修改XML标签?

c# List<string> 赋值问题

c# 组合多个函数的 yield return

c# - 如何计算索引在文本框的查看区域中垂直居中的 VerticalOffset?

c# - 是否有适用于 .NET 的声音 SDK?

c# - 将 IDbSet<class> 传递给泛型方法

.net - double.Parse(string) 的值错误

c# - xml序列化c#

c# - 无法将文本框中的值读入javascript变量

XML 验证 没有匹配的全局声明可用于验证根