0

100 万件のレコードの xml ファイルを生成したいと考えています。このために、値が 1 つだけ設定されたサンプル xml ファイルがあります。ソリューションを作成しましたが、非常に時間がかかります。私のコードは

try
        {
            label1.Text = "File creation in progress  ...";
            Random rnd = new Random();
            string sStartupPath = Application.StartupPath;
            string sName = "";
            int flag = 0;
            XmlDocument XmlFile = new XmlDocument();
            XmlFile.Load(sStartupPath + @"..\..\..\BankStatement.xml");
            XmlFile.Save(@"C:\XmlData\Bank.xml");
            XmlDocument XmlF = new XmlDocument();
            XmlF.Load(@"C:\XmlData\Bank.xml");
            long k = Convert.ToInt32(textBox1.Text);
            for (int j = 1; j < k; j++)
            {
                XmlTextReader objXmlTextReader = new XmlTextReader(sStartupPath + @"..\..\..\BankStatement.xml");
                while (objXmlTextReader.Read())
                {
                    switch (objXmlTextReader.NodeType)
                    {
                        case XmlNodeType.Element:
                            sName = objXmlTextReader.Name;
                            if (sName == "DataXml")
                            {
                                if (flag == 0)
                                    flag = 1;
                            }
                            break;
                        case XmlNodeType.Text:
                            if (flag == 1)
                            {
                                XmlNodeList elemList = XmlFile.GetElementsByTagName(sName);
                                for (int i = 0; i < elemList.Count; i++)
                                {
                                    if (elemList[i].Name == "Name")
                                        elemList[i].InnerXml = generateNames();
                                    else if (elemList[i].Name == "EmailID")
                                        elemList[i].InnerXml = generatemailids();
                                    else
                                        elemList[i].InnerXml = rnd.Next(500000).ToString();
                                }
                            }
                            break;
                        case XmlNodeType.EndElement:
                            sName = objXmlTextReader.Name;
                            if (sName == "DataXml")
                            {
                                if (flag == 1)
                                    flag = 0;
                            }
                            break;
                    }
                }
                XmlDocument dd = new XmlDocument();
                dd.LoadXml(XmlFile.InnerXml); 
                XmlNodeList node=dd.GetElementsByTagName("Customers");
                XmlDocumentFragment xfrag = XmlF.CreateDocumentFragment();
                xfrag.RemoveAll();
                for (int i = 0; i < 1; i++)
                {
                    xfrag.InnerXml = node[i].InnerXml;                        
                    XmlF.DocumentElement.FirstChild.AppendChild(xfrag);                        
                }

                XmlF.Save(@"C:\XmlData\Bank.xml");

            }

            label1.Visible = false;
            MessageBox.Show("File creation success..!");
        }
        catch (Exception ex)
        {
            label1.Text = "";
            MessageBox.Show("Error Occured");
        }

より良い解決策を教えてください。

4

2 に答える 2

2

XML を記述するための私が知っている最速の方法 (XML フラグメントを手動で構築する方法を除く) は、XmlWriterを使用することです。

XmlWriter クラスは、XML ストリームを生成する転送専用、書き込み専用、キャッシュなしの方法を提供する抽象基本クラスです。これを使用して、W3C Extensible Markup Language (XML) 1.0 (第 4 版) 勧告および XML 勧告の名前空間に準拠する XML ドキュメントを作成できます。

MSDN には、抽象 XmlWriter クラスの使用方法に関するウォークスルーがあります。

于 2012-07-02T05:03:19.683 に答える
0

大きなXMLファイルを作成するには、XmlTextWriterを使用する必要があります。

于 2012-07-02T06:00:31.327 に答える