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


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

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

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

    1. /// <summary>
    2. /// 读取数据
    3. /// </summary>
    4. private void ReadData()
    5. {
    6. isCache = false;//当前是否是缓存数据的标识
    7. if (File.Exists(cacheFilePath))//有缓存文件
    8. {
    9. string str = File.ReadAllText(cacheFilePath);//读取文件中的文本信息
    10. A0404_FileModel<TestSelectModel> fileModel = JsonConvert.DeserializeObject<A0404_FileModel<TestSelectModel>>(str);//格式化成缓存数据模型
    11. DateTime time = new SystemSqlServeBLL().GetUpdateDateTime("TestSelect");//获取数据库TestSelect表更新时间
    12. //判断数据库更新时间和本地缓存时间是否一致,如果一致则直接获取缓存文件即可
    13. if (time.ToString() == fileModel.Time.ToString())
    14. {
    15. userList = fileModel.DataList;
    16. isCache = true;
    17. MessageBox.Show("当前没有更新读取缓存文件");
    18. }
    19. else
    20. {
    21. userList = tSBLL.GetAllList();
    22. MessageBox.Show("当前有更新读取数据库");
    23. }
    24. }
    25. else//没有找到缓存文件继续从数据库内查找数据
    26. {
    27. userList = tSBLL.GetAllList();//读取数据库数据
    28. MessageBox.Show("当前有更新读取数据库");
    29. }
    30. //将数据集合赋值给表格
    31. var query = from i in userList orderby i.Id select i;
    32. DataTable table = query.CopyToDataTable();
    33. BindingSource source = new BindingSource();
    34. source.DataSource = table;
    35. this.dgv.DataSource = null;
    36. this.dgv.AutoGenerateColumns = false;
    37. this.dgv.DataSource = source;
    38. }
    39. /// <summary>
    40. /// 保存缓存数据
    41. /// </summary>
    42. private void SaveCacheData()
    43. {
    44. //判断是否存在缓存文件,如果不存在先创建
    45. if (!File.Exists(cacheFilePath))
    46. {
    47. FileStream fileStream = File.Create(cacheFilePath);//创建该文件
    48. fileStream.Close();
    49. }
    50. string str = File.ReadAllText(cacheFilePath);//读取文件中的文本信息
    51. A0404_FileModel<TestSelectModel> fileModel = JsonConvert.DeserializeObject<A0404_FileModel<TestSelectModel>>(str);//格式化成缓存数据模型
    52. DateTime sqlTime = new SystemSqlServeBLL().GetUpdateDateTime("TestSelect");//获取数据库TestSelect表更新时间
    53. //判断当前如果已有缓存文件并且缓存文件记录的时间和数据库上记录的时间一致的话则不需要继续保存文件了
    54. if (sqlTime != null && sqlTime.ToString() == fileModel.Time.ToString())
    55. return;
    56. //构建需要保存的缓存文件对象
    57. A0404_FileModel<TestSelectModel> newFileModel = new A0404_FileModel<TestSelectModel>()
    58. {
    59. Time = sqlTime,
    60. DataList = userList
    61. };
    62. string fileStr = JsonConvert.SerializeObject(newFileModel);
    63. File.WriteAllText(cacheFilePath, fileStr);
    64. }

  • 相关阅读:
    物联网:用python调入机器学习分析物联网数据入侵检测模块
    输送机产品设计四要素
    【SpringBoot定时任务篇】-----Quartz以及Task详解
    信奥赛一本通:数据排序(合影效果、病人排队、明明的随机数、单词排序、出现次数超过一半的数、统计字符数)
    Spring整合第三方框架
    C#不通过byte[],直接对内存映射文件复制内存
    Linux ubuntu下nginx安装启动
    「SpringBoot」07 指标监控
    DevOps 必备的 Kubernetes 安全清单
    【Python】创建一个简易服务器并实现移动端快速访问电脑文件
  • 原文地址:https://blog.csdn.net/wgb0409/article/details/133384536