簡單對比了一下MonoXml與SystemXml在Unity下的表現
阿新 • • 發佈:2020-08-20
測試程式碼
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(stringxml) { 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