赞
踩
开发时经常会遇到需要保存配置的情况,最常见的实现方式是将对象序列化成Json,再写入文件并保存到本地磁盘。
本文将使用开源库ApeFree.DataStore来替换原有的对象存储过程,实现一个可以随意切换存储方式的对象存储方法。
ApeFree.DataStore是一款可配置的对象存储库,支持在不同平台/介质中对内存中的对象进行存储与还原(如本地存储、注册表存储)。支持配置序列化格式(如Json、Xml),支持配置压缩算法(如GZip、Defalte),支持配置加密算法(如AES、RSA)。
开源地址:https://github.com/landriesnidis/ApeFree.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格式)
var settings = new LocalStoreAccessSettings("./config/student.conf");
// 本地存储器
IStore<Student> store = StoreFactory.Factory.CreateLocalStore<Student>(settings);
// 本地存储配置
var settings = new LocalStoreAccessSettings("./config/student.conf") {
SerializationAdapter = new XmlSerializationAdapter()
};
// 本地存储器
IStore<Student> store = StoreFactory.Factory.CreateLocalStore<Student>(settings);
// 本地存储配置
var settings = new LocalStoreAccessSettings("./config/student.conf") {
SerializationAdapter = new XmlSerializationAdapter(),
CompressionAdapter = new GZipCompressionAdapter(),
};
// 本地存储器
IStore<Student> store = StoreFactory.Factory.CreateLocalStore<Student>(settings);
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);
注意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}毫秒"); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。