Winform 将数据转化成文件保存本地,实现简单的数据缓存

本文描述了一个简单的数据缓存方案,通过判断数据库更新时间与本地缓存文件的时间,决定是否从数据库或缓存文件加载数据,以提高数据访问效率。保存缓存时,只有当数据库有更新时才更新文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求:实现简单的数据缓存方案,将更新的数据保存在本地,下次再访问的时候如果数据没有更新则不需要再访问数据库,直接读取本地文件,大大缩短数据访问时间。

读取数据:加载大数据之前先判断数据库中该表数据是否有更新,有更新的话则访问数据,无更新访问本地缓存的文件。

保存缓存文件:将最新的数据保存到本地。

 /// <summary>
        /// 读取数据
        /// </summary>
        private void ReadData()
        {
            isCache = false;//当前是否是缓存数据的标识
            if (File.Exists(cacheFilePath))//有缓存文件
            {
                string str = File.ReadAllText(cacheFilePath);//读取文件中的文本信息
                A0404_FileModel<TestSelectModel> fileModel = JsonConvert.DeserializeObject<A0404_FileModel<TestSelectModel>>(str);//格式化成缓存数据模型
                DateTime time = new SystemSqlServeBLL().GetUpdateDateTime("TestSelect");//获取数据库TestSelect表更新时间
                //判断数据库更新时间和本地缓存时间是否一致,如果一致则直接获取缓存文件即可
                if (time.ToString() == fileModel.Time.ToString())
                {
                    userList = fileModel.DataList;
                    isCache = true;
                    MessageBox.Show("当前没有更新读取缓存文件");
                }
                else
                {
                    userList = tSBLL.GetAllList();
                    MessageBox.Show("当前有更新读取数据库");
                }
            }
            else//没有找到缓存文件继续从数据库内查找数据
            {
                userList = tSBLL.GetAllList();//读取数据库数据
                MessageBox.Show("当前有更新读取数据库");
            }
            //将数据集合赋值给表格
            var query = from i in userList orderby i.Id select i;
            DataTable table = query.CopyToDataTable();
            BindingSource source = new BindingSource();
            source.DataSource = table;
            this.dgv.DataSource = null;
            this.dgv.AutoGenerateColumns = false;
            this.dgv.DataSource = source;
        }


/// <summary>
        /// 保存缓存数据
        /// </summary>
        private void SaveCacheData()
        {
            //判断是否存在缓存文件,如果不存在先创建
            if (!File.Exists(cacheFilePath))
            {
                FileStream fileStream = File.Create(cacheFilePath);//创建该文件
                fileStream.Close();
            }
            string str = File.ReadAllText(cacheFilePath);//读取文件中的文本信息
            A0404_FileModel<TestSelectModel> fileModel = JsonConvert.DeserializeObject<A0404_FileModel<TestSelectModel>>(str);//格式化成缓存数据模型
            DateTime sqlTime = new SystemSqlServeBLL().GetUpdateDateTime("TestSelect");//获取数据库TestSelect表更新时间
            //判断当前如果已有缓存文件并且缓存文件记录的时间和数据库上记录的时间一致的话则不需要继续保存文件了
            if (sqlTime != null && sqlTime.ToString() == fileModel.Time.ToString())
                return;
            //构建需要保存的缓存文件对象
            A0404_FileModel<TestSelectModel> newFileModel = new A0404_FileModel<TestSelectModel>()
            {
                Time = sqlTime,
                DataList = userList
            };
            string fileStr = JsonConvert.SerializeObject(newFileModel);
            File.WriteAllText(cacheFilePath, fileStr);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值