0

アプリケーションから SQL Server に多くの XML パラメータを渡しています (Windows と ASP.Net アプリケーションの両方)。

以前は、以下のように、ベースの連結演算子を文字列で使用して XML を構築していました。

string XmlDetails = string.Empty;
XmlDetails = "<APPLICATION><SEND>";
XmlDetails += "<ID>" + txtCardNo.Text.ToString() + "</ID>";
XmlDetails += "</SEND></APPLICATION>";

アプリケーションは実際にメモリを大量に消費し、非常に遅かったです。大きな XML を構築するために、連結方法を String Builder クラスに変更します。

 XmlDetails = string.Format("{0}<{1}>{2}</{1}>", "<APPLICATION><SEND>", "ID", txtCardNo.Text.ToString()); 
 XmlDetails = string.Format("{0}<{1}>{2}</{1}>{3}", XmlDetails, "PAYDET", txtPOSPaydet.Text.ToString(), "</SEND></APPLICATION>");

上記の方法を使用しているときに、アプリケーションで使用されるメモリ レベルが大幅に変化しました。

私のアプリケーションで採用できるより良い方法があるかどうか知りたいです。

4

2 に答える 2

1

利用可能なオプションがいくつかあります。

XElementを使用すると、文字列自体を作成することなく XML を手作りできますが、次のようになります。

XElement xmlTree1 = new XElement("Root",
    new XElement("Child1", 1),
    new XElement("Child2", 2),
    new XElement("Child3", 3)
);

Console.WriteLine(xmlTree2);

これにより、コンソールに次のように書き込まれます。

<Root>
  <Child1>1</Child1>
  <Child2>2</Child2>
  <Child3>3</Child3>
</Root>

XML 形式が静的な場合は、データを表すオブジェクトを作成し、 としてマークして[Serializable]からシリアル化することもできます。

public static void Main(string[] args)
{
    var myObjectToSerialize = new Root()
    {
        Child1 = 1,
        Child2 = 2,
        Child3 = 3
    };

    var serializer = new XmlSerializer(typeof(Root));
    serializer.Serialize(Console.Out, myObjectToSerialize);
    Console.ReadKey();
}

次のクラスで:

[Serializable]
public class Root
{
    public int Child1 { get; set; }

    public int Child2 { get; set; }

    public int Child3 { get; set; }
}
于 2015-03-11T09:08:12.860 に答える
0

XDocument クラスを使用しない理由。

var doc = new XDocument(
                    new XElement("APPLICATION",
                        new XElement("SEND",
                            new XElement("ID", txtCardNo.Text.ToString())
                            )
                        )
                    );
于 2015-03-11T09:06:22.357 に答える