Advertisement

易语言-Simdjson助力易语言实现最快JSON解析

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:ZIP


简介:
本文章介绍如何利用Simdjson库加速易语言中的JSON数据解析过程,帮助开发者提高程序性能和效率。 今天更新了一些之前帖子提到的问题: 1. 封装了几个自定义函数(如 move_to_root, array_get_length, array_move_to_index),以减少 X64Call 的调用次数; 2. 实现了对类似 [0].A.B[0].C 路径的解析和取值功能。 接下来谈谈遇到的问题及一些体验: 1. 测试数据大小约为 96MB,可以正常处理;但更大一些(如 128MB)时会崩溃。崩溃发生在 ParsedJson.allocateCapacity 函数中。 (提示:对于这种规模的数据建议使用 SAX 方式解析) 2. 还有一个已知的隐蔽 BUG 可能与 print_ 函数有关:静态编译后,如果在 demo 中递归打印一个 Object(例如 [0]),再尝试解析时会在 iterator_free 出现崩溃。但如果只是取值则不会出现这种情况。 3. 该库会拷贝数据,在处理长数据时这不是最佳做法;感觉这个库更偏向于科研性质使用,与那些经过大量测试的老牌库相比,目前可能只有速度占优势。 4. 受限于机器或其他因素影响,用易语言无法达到宣传中的千兆字节每秒解析速度。不过几百 MBs 的性能还是有的。 5. 由于在解析时会拷贝数据,不确定是否会生成64位内存地址;暂时将指针到文本当作32位使用但心里没底,请 eWOW64Ext 开发者帮忙看一下... 6. 库采用的是10.0.17134.0 版本的 SDK MT 编译,不再支持 Windows XP。低版本的 SDK 无法通过编译。 (详情请查阅 MSDN) 7. 关于编译模式:使用 MinSizeRel 模式生成时会导致 double 取值异常,具体原因未深究;所以默认采用 Release 模式。 我会在附件中附上三种编译模式(RelWithDebInfo, MinSizeRel, Release)下生成的文件供研究。 8. 对 WOW64Ext 方面的知识了解有限,无法保证代码稳定性。抛砖引玉,请大家进群与我交流以封装完整模块和工具。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • -SimdjsonJSON
    优质
    本文章介绍如何利用Simdjson库加速易语言中的JSON数据解析过程,帮助开发者提高程序性能和效率。 今天更新了一些之前帖子提到的问题: 1. 封装了几个自定义函数(如 move_to_root, array_get_length, array_move_to_index),以减少 X64Call 的调用次数; 2. 实现了对类似 [0].A.B[0].C 路径的解析和取值功能。 接下来谈谈遇到的问题及一些体验: 1. 测试数据大小约为 96MB,可以正常处理;但更大一些(如 128MB)时会崩溃。崩溃发生在 ParsedJson.allocateCapacity 函数中。 (提示:对于这种规模的数据建议使用 SAX 方式解析) 2. 还有一个已知的隐蔽 BUG 可能与 print_ 函数有关:静态编译后,如果在 demo 中递归打印一个 Object(例如 [0]),再尝试解析时会在 iterator_free 出现崩溃。但如果只是取值则不会出现这种情况。 3. 该库会拷贝数据,在处理长数据时这不是最佳做法;感觉这个库更偏向于科研性质使用,与那些经过大量测试的老牌库相比,目前可能只有速度占优势。 4. 受限于机器或其他因素影响,用易语言无法达到宣传中的千兆字节每秒解析速度。不过几百 MBs 的性能还是有的。 5. 由于在解析时会拷贝数据,不确定是否会生成64位内存地址;暂时将指针到文本当作32位使用但心里没底,请 eWOW64Ext 开发者帮忙看一下... 6. 库采用的是10.0.17134.0 版本的 SDK MT 编译,不再支持 Windows XP。低版本的 SDK 无法通过编译。 (详情请查阅 MSDN) 7. 关于编译模式:使用 MinSizeRel 模式生成时会导致 double 取值异常,具体原因未深究;所以默认采用 Release 模式。 我会在附件中附上三种编译模式(RelWithDebInfo, MinSizeRel, Release)下生成的文件供研究。 8. 对 WOW64Ext 方面的知识了解有限,无法保证代码稳定性。抛砖引玉,请大家进群与我交流以封装完整模块和工具。
  • JSON模块V2.0
    优质
    简介:易语言JSON解析模块V2.0是一款专为易语言开发者设计的高效工具,提供快速、稳定的JSON数据解析和生成功能,助力开发人员简化复杂的数据处理流程。 易语言JSON解析模块2.0源码包含以下系统结构:破坏线程、解析线程、文本格式化快速、文本反格式化快速、换行及缩进、文本转义解析、文本转义、是否为数值文本、取父表达式、成员名到下标和取类中总数。
  • 图片压缩至小-
    优质
    本教程详细介绍了使用易语言进行图片压缩的技术和方法,帮助开发者将图片文件体积减小到最低限度,同时保持较好的视觉效果。适合需要优化应用资源的编程爱好者学习参考。 易语言图片压缩到最小化处理。
  • 中的Json模块
    优质
    本模块为易语言用户提供了便捷的Json数据解析和生成功能,帮助开发者轻松处理复杂的Json数据结构。 易语言提供了一个专门的Json解析模块——水淼Json易语言水淼JSON解析模块源码。该模块能够自主解析各种JSON数据类型,并使用树形结构直观清晰地展示所有内容,帮助程序员快速定位到所需的JSON节点,从而提高开发效率。
  • 2.0 JSON模块源码
    优质
    本段代码为易语言2.0版本中的JSON解析模块源码,提供高效便捷的数据处理功能,适用于需要解析和生成JSON格式数据的各种场景。 易语言JSON解析模块2.0源码提供了一系列功能强大的函数用于处理JSON数据,在易语言环境中实现高效的解析与生成操作。该版本进行了多项优化和改进,增强了代码的稳定性和兼容性,并提供了详细的文档以帮助开发者快速上手使用。
  • -利用OCR速图片文字识别
    优质
    本项目介绍如何使用易语言开发环境结合OCR技术,实现高效、准确地从图像中提取文本信息的功能。适合需要处理大量图文数据的用户和开发者。 源码通过调用某网站识别功能,展示了易语言POST上传图片的示例程序。识别率达到90%以上,并且可以无限次调用,不会出现卡顿现象。
  • -速填充树型框2.0
    优质
    易语言-快速填充易语言树型框2.0是一款专为易语言编程环境设计的插件,它能够帮助开发者高效地生成和管理复杂的树形数据结构,显著提升开发效率。 关于“归并到树2.0”模块的介绍 在该模块之前,使用的是复制窗口组件,在排序数据后逐个判断加入数型框中。这种方法速度较慢,并且需要提供树形框架作为参数。 由于涉及更复杂的分类形式(如 分类类别项目年月日等),原有的方法导致运行效率更低,严重影响软件性能。因此经过一段时间的努力开发出了“归并到树”模块的1.5版本。 不断测试优化后推出了2.0版,该版本包含以下功能: 1、可以合并数据库中的一个字段(无论是日期还是文本类型)与图片索引和数值等参数一起提供。 例如:某文本型字段A含有若干条“分类类别项目子项a 子项b...子项n”形式的记录。快速归并后返回字节集。 例如:某日期时间型字段B包含若干条“2007年12月18日”的格式,经过处理后同样会生成一个字节序列。 2、可以合并数据库中的两个字段,当第一个是日期或时间类型时第二个必须为文本;如果第一项是文本则第二项可选择文本或者日期/时间。归并后的结果以字节集形式返回。 3、支持根据项目名称和数值查找可能的位置索引,并且可以根据是否需要精确匹配来搜索树形框内的项目,速度非常快。 测试环境使用的是PⅢ600EB处理器,256MB内存以及Windows 2000 SP4操作系统。在处理1万条记录时最快耗时为2434毫秒。 目前我正在实际应用此模块,并认为其中一些代码仍有优化空间;但由于时间限制无法继续改进它了,因此公开源码希望有兴趣的朋友能在保留原有优点的基础上进一步完善该功能。 Life 2007-12-18