C# 对象存储

编程入门 行业动态 更新时间:2024-10-24 08:29:16

C# <a href=https://www.elefans.com/category/jswz/34/1771306.html style=对象存储"/>

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# 对象存储

本文发布于:2024-02-27 07:03:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1705626.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对象

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!