1. 程式人生 > 實用技巧 >簡單對比了一下MonoXml與SystemXml在Unity下的表現

簡單對比了一下MonoXml與SystemXml在Unity下的表現

測試程式碼

public class NewBehaviourScript : MonoBehaviour {

    // Use this for initialization
    void Start () {
        
    }

    static void TestXmlLoad(string xml)
    {
        SecurityParser parser = new SecurityParser();
        parser.LoadXml(xml);
    }

    static void TestSystemXMLLoad(string
xml) { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); } int count = 0; // Update is called once per frame void Update () { if(++count == 200) { string xmlText = File.ReadAllText(@"F:\Projects\TestPXML\TestPXML\test.xml");
int LoadCount = 5; Stopwatch stopwatch = new Stopwatch(); { stopwatch.Start(); for (int i = 0; i < LoadCount; ++i) { TestXmlLoad(xmlText); } UnityEngine.Debug.Log(string.Format("
MonoXml Load:{0}", stopwatch.Elapsed)); } { stopwatch.Stop(); stopwatch.Start(); for (int i = 0; i < LoadCount; ++i) { TestSystemXMLLoad(xmlText); } UnityEngine.Debug.Log(string.Format("SystemXml Load:{0}", stopwatch.Elapsed)); } } } }

測試用xml400kb左右。

時間:

看起來MonoXml會快一點,大約少1/3左右的時間開銷。

記憶體:

開了DeepProfile。看起來Systemxml需要更少的記憶體,不開DeepProfile測不到記憶體,這就尷尬了。

另外在非Unity環境下測試了一下,使用程式碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using Mono.Xml;
using System.Diagnostics;

namespace TestPXML
{
    class Program
    {
        private static List<object> Caches = new List<object>();

        static void Main(string[] args)
        {
      //      Console.WriteLine("prepare load from monoxml");
       //     Console.ReadKey();

            string xmlText = Encoding.UTF8.GetString(Properties.Resources.SettlementForm);

            int LoadCount = 100;

            GC.Collect();
            GC.Collect();

            Stopwatch stopwatch = new Stopwatch();
//             {
//                 stopwatch.Start();
// 
//                 for(int i=0; i<LoadCount; ++i)
//                 {
//                     TestXmlLoad(xmlText);
//                 }
// 
//                 Console.WriteLine($"MonoXml Load:{stopwatch.Elapsed}");
//             }

            Console.WriteLine("prepare load from system.xml");
            Console.ReadKey();
            {
                stopwatch.Stop();
                stopwatch.Start();

                for (int i = 0; i < LoadCount; ++i)
                {
                    TestSystemXMLLoad(xmlText);
                }

                Console.WriteLine($"SystemXML Load:{stopwatch.Elapsed}");
            }

            GC.Collect();
            GC.Collect();

            Console.WriteLine("all done, press any key.");
            Console.ReadKey();
        }

        static void TestXmlLoad(string xml)
        {
            SecurityParser parser = new SecurityParser();
            parser.LoadXml(xml);

            Caches.Add(parser);
        }

        static void TestSystemXMLLoad(string xml)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);

            Caches.Add(doc);
        }
    }
}

   為了避免誤差,cache之類的,使用工具分兩個波次測試。

SystemXML結論如下:

MonoXML結論如下:

因此基本可以證明,MonoXml載入速度比SystemXml快,但是需要的記憶體開銷會高於System.xml