对象存储"/>
C# 对象存储
C# 对象存储
文章目录
- C# 对象存储
- 前言
- 关于DataStore
- 示例代码
- 实体类
- 创建对象存储器
- 示例一、Json格式的本地存储器
- 示例二、Xml格式的本地存储器
- 示例三、Xml格式(采用GZip压缩算法)的本地存储器
- 示例四、Xml格式(采用AES加密)的本地存储器
- 示例五、Xml格式(Deflate+AES)的注册表存储器
- 测试窗体
前言
开发时经常会遇到需要保存配置的情况,最常见的实现方式是将对象序列化成Json,再写入文件并保存到本地磁盘。
本文将使用开源库ApeFree.DataStore来替换原有的对象存储过程,实现一个可以随意切换存储方式的对象存储方法。
关于DataStore
ApeFree.DataStore是一款可配置的对象存储库,支持在不同平台/介质中对内存中的对象进行存储与还原(如本地存储、注册表存储)。支持配置序列化格式(如Json、Xml),支持配置压缩算法(如GZip、Defalte),支持配置加密算法(如AES、RSA)。
开源地址:.DataStore
示例代码
实体类
创建一个用于测试的实体类型,预设了初始值;
/// <summary>/// 学生(测试实体类)/// </summary>public class Student{public long Id { get; set; } = 2022030511;public string Name { get; set; } = "张三";public DateTime DateOfBirth { get; set; } = new DateTime(2013, 6, 1);public string ClassName { get; set; } = "A班";public string Description { get; set; } = "平平无奇的学生";public bool IsYoungPioneer { get; set; } = true;public string Address { get; set; } = "二仙桥成华大道8号";}
创建对象存储器
示例一、Json格式的本地存储器
// 本地存储配置(默认使用Json格式)var settings = new LocalStoreAccessSettings("./config/student.conf");// 本地存储器IStore<Student> store = StoreFactory.Factory.CreateLocalStore<Student>(settings);
示例二、Xml格式的本地存储器
// 本地存储配置var settings = new LocalStoreAccessSettings("./config/student.conf") { SerializationAdapter = new XmlSerializationAdapter()};// 本地存储器IStore<Student> store = StoreFactory.Factory.CreateLocalStore<Student>(settings);
示例三、Xml格式(采用GZip压缩算法)的本地存储器
// 本地存储配置var settings = new LocalStoreAccessSettings("./config/student.conf") { SerializationAdapter = new XmlSerializationAdapter(),CompressionAdapter = new GZipCompressionAdapter(),};// 本地存储器IStore<Student> store = StoreFactory.Factory.CreateLocalStore<Student>(settings);
示例四、Xml格式(采用AES加密)的本地存储器
ASE密钥:12345678901234567890123456789012
AES向量:0123456789abcdef
// 本地存储配置var settings = new LocalStoreAccessSettings("./config/student.conf") { SerializationAdapter = new XmlSerializationAdapter(),EncryptionAdapter = new AesEncryptionAdapter("12345678901234567890123456789012".GetBytes(), "0123456789abcdef".GetBytes()),};// 本地存储器IStore<Student> store = StoreFactory.Factory.CreateLocalStore<Student>(settings);
示例五、Xml格式(Deflate+AES)的注册表存储器
注意Deflate+AES纯粹是为了演示配置的用法:
// 注册表存储配置var settings = new RegistryStoreAccessSettings(RegistryHive.CurrentUser, @"ApeFree\DataStore\Demo","student") { SerializationAdapter = new XmlSerializationAdapter(),CompressionAdapter = new DeflateCompressionAdapter(),EncryptionAdapter = new AesEncryptionAdapter("12345678901234567890123456789012".GetBytes(), "0123456789abcdef".GetBytes()),};// 注册表存储器IStore<Student> store = StoreFactory.Factory.CreateRegistryStore<Student>(settings);
测试窗体
public partial class EditForm : Form{private IStore<Student> store;public EditForm(IStore<Student> store) : this(){this.store = store;tsmiLoad.PerformClick();}private EditForm(){InitializeComponent();}private void tsmiLoad_Click(object sender, EventArgs e){store.Load();propertyGrid.SelectedObject = store.Value;}private void tsmiSave_Click(object sender, EventArgs e){store.Save();Close();}private void tsmiTestIO_Click(object sender, EventArgs e){int times = 1000;Stopwatch watch = new Stopwatch();watch.Restart(); for (int i = 0; i < times; i++){store.Load();store.Save();}watch.Stop();// 计算耗时(毫秒)var elapsedTime = watch.ElapsedTicks * 1000.0 / Stopwatch.Frequency;MessageBox.Show($"存取{times}次测试完毕。\r\n" +$"总耗时:{elapsedTime}毫秒。\r\n" +$"平均单次读取+保存耗时:{elapsedTime / times}毫秒");}}
更多推荐
C# 对象存储
发布评论