`

使用Rope来高效处理长字符串

    博客分类:
  • java
阅读更多

    前段时间看了这篇文章《Ropes:理论与实践 》。这两天为了提高工作中某个系统对外接口的效率,才认真学习了一番。本质上Ropes是将字符串表示为一棵二叉树,特别适用于长字符串的处理,貌似c++ STL库中也有这么个实现。具体实现和原理还是看这篇paper 。《Ropes:理论与实践 》 一文中给出的测试数据相当惊人,Ropes比之String和StringBuffer在append,insert,delete等操作上的效率都有一 个数量级以上的差距。跑下作者给出的测试程序,其实在测试的字符串不是很长的情况下,这个差距并没有那么大,这也从侧面说明了Rope的应用范围:即只有 在大量修改大型字符串的应用程序中才能看到明显的性能提升。那么是否可以用Rope替代StringBuffer做append生成字符串(比如我要的生 成xml)。作者也说啦:
  “由于 Rope 的附加性能通常比 StringBuffer 好,这时使用 rope 是否有意义呢?答案还是否。不论何时将输入的数据组合在一起形成格式化输出时,最漂亮最有效的方法是使用模板引擎(例如 StringTemplate 或 FreeMarker)。这种方法不仅能干净地将表示标记与代码分开,而且模板只进行一次编译(通常编译为 JVM 字节码),以后可以重用,从而使它们拥有极佳的性能特征。”

    我用Rope for java替代了StringBuffer做XML生成,效率提升在5%-30%左右,xml字符串不是很长,这个提升显然有限,也带来了不必要的复杂度。 因此最后还是用Velocity模板引擎来生成XML,测试的结果效率并没有多少改善,但是显然更容易维护和开发了。回到Rope的话题,我用Ruby实 现了个版本,Rubyforge上有一个Rope的实现,但是看了源码,与paper所述算法有点差异,因此照着Rope for java也实现了一个Rope4r 。 测试的结果证明在长字符串的累积操作上,Rope4r的append比之String的+=性能可以快上3倍左右,而如果采用String的< <操作,不是immutable的,当然是最快了;比较郁闷的是slice和insert操作都比String的慢上几倍,因为Ruby的 String、Array的内建对象都是直接用c写成并做了优化的,我猜测原因在这。

分享到:
评论

相关推荐

    TRF.rar_trf_字符串匹配

    TRF(Tight Rope Walking)算法是一种高效且优化的字符串匹配算法,它旨在提高在大规模文本中查找特定模式的效率。这个压缩包中的内容,"TRF.rar_trf_字符串匹配",显然包含了一个实现TRF算法的程序,以及可能用于...

    Rope

    每个线段可以是简单的字符串,这样就可以利用字符串操作的效率,同时通过维护线段间的链接,可以对整个Rope进行高效的操作。当需要修改Rope时,只需要修改受影响的线段,而不是整个文本,从而减少了内存的消耗和操作...

    rope-utf16-splay:针对使用UTF-16代码单元和行列对进行索引和更新而优化的粗字符串

    这里的关键在于,通过使用展开树,库可以高效地处理字符串的切片、拼接、查找以及替换等操作。 - **索引优化**:在UTF-16编码中,由于存在代理对,索引操作可能比较复杂。`rope-utf16-splay` 库通过其内部的展开树...

    快速且内存优化的C ++字符串库-C/C++开发

    SuperString SuperString是C ++的高效字符串库,可实现出色的内存和CPU优​​化。 SuperString使用Rope(数据结构)和优化技术。 具有快速和内存的功能-SuperString SuperString是C ++的高效字符串库,可实现出色的...

    3DMAX一键绳子插件Rope下载

    总结,"3DMAX一键绳子插件Rope"是一个高效实用的工具,它通过简便的操作和丰富的定制选项,使得在3DMAX中创建绳索效果变得轻松易行。对于那些需要频繁处理绳索模型的设计师来说,这款插件无疑是一个宝贵的资源。

    Rope 数据结构 C# 实现

    网上很少有 .net 版本的的 Rope 实现,为方便自己使用,将网上的一个 java 版本 (ahmadsoft)的翻译到了 C#,服务人类。 改动了其中的字符串匹配部分,将... 只是做了简单的测试,大字符串的处理效率还行,不保证没bug

    unity插件Rope Toolkit-2.2.0

    Rope Toolkit 为您的项目带来稳定、快速的绳索物理特性。...捆绑的示例场景展示了如何连接绳子来模拟起重机、绳桥、秋千和拳击场。 https://assetstore.unity.com/packages/tools/physics/rope-toolkit-154662

    superstring.py:快速且内存优化的字符串库,用于Python中的重文本操作

    superstring.py使用Rope(数据结构)和优化技术。 性能实例 这两张图显示了在superstring.py和python内置字符串之间的内存消耗和执行时间方面的比较(比较程序包括将50000字节文本的所有可能子字符串追加到列表中)...

    Obi Rope 6.2.unitypackage.zip

    总结来说,Obi Rope 6.2是一款为Unity开发者量身定制的绳索物理插件,它通过精确的物理模拟、强大的碰撞处理和优秀的性能优化,为游戏带来了生动而真实的绳索效果。无论是动作冒险游戏还是解谜平台游戏,Obi Rope ...

    Rope+BETA+4.0+链子+绳子脚本示例

    - 性能提升:新版本可能对代码分析和重构速度进行了优化,使得处理大型代码库更加高效。 - 更强的兼容性:可能增加了对最新Python版本的支持,或者修复了与某些库的兼容性问题。 - API改进:可能更新了API设计,使其...

    Rope轻量级ETL工具 v1.1.0.zip

    总的来说,Rope轻量级ETL工具 v1.1.0不仅是一个功能完备的数据处理工具,也是学习和研究ETL流程、数据处理技术的理想平台。无论是学生进行毕业设计,还是专业开发者解决实际问题,都能从中受益。通过深入源码,我们...

    unity用于制作绳索的插件Rope

    unity用于制作绳索的插件Rope unity用于制作绳索的插件Rope unity用于制作绳索的插件Rope unity用于制作绳索的插件Rope

    Unity最新绳子插件《Ultimate Rope Editor V1.25》

    The Ultimate Rope Editor is a powerful tool that can generate procedural ropes and also apply rope physics to your already existing meshes. Physics and parameters can be tweaked in play mode for real ...

    Unity 绳索插件 Obi Rope

    Unity 绳索插件 Obi Rope

    unity绳子插件 Obi Rope 6.0

    1. **物理模拟**:Obi采用高效的物理引擎来模拟绳索的行为,考虑了张力、弯曲、剪切和摩擦等因素,使得绳索动态表现更加自然。 2. **真实感渲染**:通过使用高质量的着色器和光照模型,Obi能够产生非常逼真的绳索...

    Ultimate Rope Editor 1.18.rar

    总的来说,Ultimate Rope Editor 1.18是一款为Unity开发者量身打造的专业绳索制作工具,它的强大功能和易用性使得绳索模拟不再成为开发难题。无论你是新手还是经验丰富的开发者,这款插件都能帮助你在游戏世界中创造...

    Unity Obi Rope 6.4

    - 使用样条线进行非线性、非破坏性的绳索编辑。在编辑绳索时,实时获得关于绳索效果的反馈! - 使用样条进行过程化平滑网格生成,同时附带切线空间更新和法线贴图支持。无需为绳索手动生成几何逻辑。 - 自适应基于...

    Unity Obi Rope 6.4 绳索插件应用

    使用 Obi Rope,你可以在几秒内创建绳索和杆子,同时完全控制它们的形状和行为:导向粒子技术可以对杆子使用不同的扭转/扭曲特效。绳索更加轻量化,并且能裁剪/调整尺寸。两者都可以与环境发生碰撞以及相互碰撞,也...

    Obi Rope 5.3.zip

    总的来说,Obi Rope 5.3是Unity开发者实现绳索物理模拟的得力助手,无论是在游戏制作还是交互式体验设计中,它都能帮助你创造出更生动、更真实的绳索效果,提升作品的整体质量。如果你的项目需要绳索元素,那么Obi ...

    unity 绳子插件Rope

    unity绳子插件 rope Ultimate Rope Editor v1.18 亲测好用

Global site tag (gtag.js) - Google Analytics