.NET(C#):使用BinaryFormatter.UnsafeDeserialize增加還原序列化效能

來源:互聯網
上載者:User

首先由於該方法用LinkDemand檢查SecurityPermissionAttribute.SerializationFormatter許可權,因此部分受信任環境下可能無法使用。該方法相比Deserialize方法有更好的效能。

 

代碼:

//+ using System.Runtime.Serialization.Formatters.Binary

//+ using System.IO;

 

//建立一個100個元素的字典

var dic = new Dictionary<int, string>();

for (int i = 0; i < 100; i++)

    dic.Add(i, i.ToString());

 

//序列化到檔案

var bf = new BinaryFormatter();

var stream = new FileStream(Path.GetTempFileName(), FileMode.Create, FileAccess.ReadWrite);

bf.Serialize(stream, dic);

stream.Seek(0, SeekOrigin.Begin);

 

//使用Deserialize進行還原序列化

var stopWatch = Stopwatch.StartNew();

bf.Deserialize(stream);

Console.WriteLine(stopWatch.Elapsed);

 

//使用UnsafeDeserialize進行還原序列化

stream.Seek(0, SeekOrigin.Begin);

stopWatch.Restart();

bf.UnsafeDeserialize(stream, null);

Console.WriteLine(stopWatch.Elapsed);

 

UnsafeDeserialize的效能提升和序列化對象本身的結構和大小有關係。

 

比如樣本中的100個元素的字典結果:

00:00:00.0015032

00:00:00.0004704

 

10個元素效能差異更大:

00:00:00.0010952

00:00:00.0001489

 

而1000個元素的話差異並不是很大:

00:00:00.0045790

00:00:00.0036886

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.