OpenXML性能真的低下嗎?


博文NET導出Excel的四種方法及評測 中對比了4個庫的導出性能,但對OpenXML的評價並不高,本人覺得不合理,所以我重新測試下性能

 

基於OpenXML的包裝類 ExcelDownWorker

 1 public class ExcelDownWorker
 2 {
 3     void NewRow();//新行
 4 
 5     void Write(object value);//寫入列,從A列開始寫
 6 
 7     void Start(Stream stream);//創建開始
 8
 9     void End();//創建結束
10 }

執行數據寫入,數據是前面測試數據 6W行 10列

static void Excel(List<Temp> lt)
        {
            Console.WriteLine(GC.GetTotalMemory(true));
            var st = new Stopwatch();st.Start();var ew = new ExcelDownWorker();
            using (var fs = new FileStream(Directory.GetCurrentDirectory() + "\\data.xlsx", FileMode.Create, FileAccess.ReadWrite))
            {
                ew.Start(fs);
                var ps = typeof(Temp).GetProperties();
                foreach (var p in ps) { ew.Write(p.Name); }
                ew.NewRow();
                for (var i = 0; i < 1; i++)//用於測試12W,18W,102W
                {
                    foreach (var n in lt)
                    {
                        foreach (var p in ps) { ew.Write(p.GetValue(n)); }
                        ew.NewRow();
                    }
                }
                ew.End();
                fs.Flush();
            }
            st.Stop();
            Console.WriteLine(GC.GetTotalMemory(true));
            Console.WriteLine(st.ElapsedMilliseconds);
        }
class Temp
    {
        public int Id { get; set; }
        public int Gender { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public DateTime BirthDate { get; set; }
        public string Company { get; set; }
        public string Phone { get; set; }
        public string Website { get; set; }
        public string SSN { get; set; }
    }
static void Main(string[] args)
        {
            var s = File.ReadAllText(Directory.GetCurrentDirectory() + "\\test-data.json");
            var lt = DeserializeObject<List<Temp>>(s);
            for (var i = 0; i < 5; i++)
            {
                Console.WriteLine($"___________________第{i+1}次________________________");
                Excel(lt);
            }
            Console.ReadKey();
        }

結論:OpenXML畢竟是底褲,性能有很好的可塑性。6W行10列 耗時800~1000毫秒。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM