设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 3414|回复: 1
收起左侧

易语言将INI配置项拆分多个文件分卷读写,1分钟处理上万条参数,比单文件快N倍

[复制链接]
发表于 2018-8-28 23:44:32 | 显示全部楼层 |阅读模式

  1. .版本 2
  2. .支持库 spec
  3. .支持库 EThread
  4. .支持库 YunReg

  5. .程序集 程序集1
  6. .程序集变量 计数2, 整数型
  7. .程序集变量 模式, 文本型

  8. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码

  9. ' 由于分卷的INI文件,是分散在多个文件上的,通过配置项名称计算出一个编号并写入该编号的文件名中,读写文件往往较快,单文件只要不太大,速度基本不会有多大变化。
  10. ' 而单个INI文件的读写一次,需要读入整个内存,送入CPU进行逐行分析修改,非常费时,文件越大读写越慢,上百MB就容易崩溃,读写完需要数天的时间。
  11. ' 如果需要频繁读写的INI文件超过10Mb,那么就需要用本方法进行分卷读写,否则会严重影响到程序运行效率。

  12. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  13. 返回 (0)  ' 可以根据您的需要返回任意数值

  14. .子程序 _临时子程序
  15. .局部变量 配置项目录, 文本型
  16. .局部变量 计数, 整数型
  17. .局部变量 时间, 整数型
  18. .局部变量 MD5, 文本型
  19. .局部变量 配置项文件, 文本型
  20. .局部变量 测试条数, 整数型

  21. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
  22. 调试输出 (“程序开始”)
  23. 创建目录 (“data”)
  24. 配置项目录 = 取运行目录 () + “/data”
  25. 配置项文件 = 取运行目录 () + “/data.ini”
  26. 测试条数 = 100000
  27. 启动线程 (&频率统计, , )
  28. 时间 = 取启动时间 ()
  29. 计数2 = 0
  30. 模式 = “分卷写”

  31. .计次循环首 (测试条数, 计数)
  32.     计数2 = 计数2 + 1
  33.     写配置项_分卷 (配置项目录, “data”, 到文本 (计数), 到文本 (计数), 100)
  34. .计次循环尾 ()
  35. 调试输出 (模式 + 到文本 (测试条数) + “条INI时间(秒)”, (取启动时间 () - 时间) ÷ 1000)

  36. 模式 = “分卷读”
  37. 计数2 = 0
  38. 时间 = 取启动时间 ()
  39. .计次循环首 (测试条数, 计数)
  40.     计数2 = 计数2 + 1
  41.     读配置项_分卷 (配置项目录, “data”, 到文本 (计数), , 100)
  42. .计次循环尾 ()
  43. 调试输出 (模式 + 到文本 (测试条数) + “条INI时间(秒)”, (取启动时间 () - 时间) ÷ 1000)

  44. 模式 = “传统写”
  45. 计数2 = 0
  46. 时间 = 取启动时间 ()
  47. .计次循环首 (测试条数, 计数)
  48.     计数2 = 计数2 + 1
  49.     写配置项 (配置项文件, “data”, 到文本 (计数), 到文本 (计数))
  50. .计次循环尾 ()
  51. 调试输出 (模式 + 到文本 (测试条数) + “条INI时间(秒)”, (取启动时间 () - 时间) ÷ 1000)

  52. 模式 = “传统读”
  53. 计数2 = 0
  54. 时间 = 取启动时间 ()
  55. .计次循环首 (测试条数, 计数)
  56.     计数2 = 计数2 + 1
  57.     写配置项 (配置项文件, “data”, 到文本 (计数), 到文本 (计数))
  58. .计次循环尾 ()
  59. 调试输出 (模式 + 到文本 (测试条数) + “条INI时间(秒)”, (取启动时间 () - 时间) ÷ 1000)

  60. ' 调试输出 (读配置项_分卷 (配置项目录, “data”, “99c5e07b4d5de9d18c350cdf64c5aa3d”, “失败”, 100))




  61. .子程序 读配置项_分卷, 文本型, 公开, 将配置文件中的大量配置项拆分成多个INI文件以提高读写性能。
  62. .参数 配置项目录, 文本型, , 目录中将包含若干个 0以上数字.ini 这些文件。
  63. .参数 节名称, 文本型, , 包含欲写入配置项所处节的名称,详见 读配置项()
  64. .参数 配置项名称, 文本型, , 通过配置项名称,读出配置项对应的值,详见 读配置项()
  65. .参数 默认文本, 文本型, 可空, 配置项读入失败返回的文本,详见 读配置项()
  66. .参数 分卷数, 整数型, , 范围在2~1073741824之间,数据越大则分卷数应越多,读写的分卷数不一致将读不出或出现错乱。
  67. .局部变量 配置项目录2, 文本型
  68. .局部变量 文件名, 文本型
  69. .局部变量 文件编号, 整数型

  70. .如果真 (分卷数 < 2 或 分卷数 > 1073741824)
  71.     返回 (“”)
  72. .如果真结束
  73. 文件编号 = 取绝对值 (取数据CRC较验码 (到字节集 (配置项名称))) % 分卷数
  74. 配置项目录2 = 子文本替换 (配置项目录, “/”, “\”, , , 真)
  75. 文件名 = 配置项目录2 + “\” + 到文本 (文件编号) + “.ini”
  76. 返回 (读配置项 (文件名, 节名称, 配置项名称, 默认文本))


  77. .子程序 写配置项_分卷, 逻辑型, 公开, 与 读配置项_分卷() 配套使用。
  78. .参数 配置项目录, 文本型, , 详见 读配置项_分卷()
  79. .参数 节名称, 文本型, , 详见 写配置项()
  80. .参数 配置项名称, 文本型, , 详见 写配置项()
  81. .参数 欲写入值, 文本型, , 详见 写配置项()
  82. .参数 分卷数, 整数型, , 详见 读配置项_分卷()
  83. .局部变量 配置项目录2, 文本型
  84. .局部变量 文件名, 文本型
  85. .局部变量 文件编号, 整数型

  86. .如果真 (分卷数 < 2 或 分卷数 > 1073741824)
  87.     返回 (假)

  88. .如果真结束
  89. 配置项目录2 = 子文本替换 (配置项目录, “/”, “\”, , , 真)
  90. 文件编号 = 取绝对值 (取数据CRC较验码 (到字节集 (配置项名称))) % 分卷数
  91. 文件名 = 配置项目录2 + “\” + 到文本 (文件编号) + “.ini”
  92. 返回 (写配置项 (文件名, 节名称, 配置项名称, 欲写入值))


  93. .子程序 频率统计

  94. .判断循环首 (真)
  95.     延时 (10 × 1000)
  96.     调试输出 (模式 + “频率(hz)”, 计数2 ÷ 10)
  97.     计数2 = 0
  98. .判断循环尾 ()
复制代码


相关帖子

发表于 2018-8-29 18:49:49 | 显示全部楼层
占个沙发,帖子底的亮了...
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-27 04:27 , Processed in 0.910052 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表