• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua性能优化技巧(四):关于字符串

Lua性能优化技巧(四):关于字符串

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了lua性能优化,lua性能,lua脚本优化,lua代码优化,lua 优化等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

与表类似,了解Lua如何实现字符串可以让你更高效地使用它。

Lua实现字符串的方式与多数其他脚本语言所采用的两种主要方式都不相同。首先,Lua中的所有字符串都是内部化[1]的,这意味着Lua维护着任何字符串的一个单一拷贝。当一个新字符串出现时,Lua检查是否有现成的拷贝,如果有的话,重用之。内部化使得诸如字符串对比和索引表之类的操作非常快速,但是会降低创建字符串的速度。

第二,Lua中的变量从不存储字符串,只是引用它们。这种实现方式可以加快很多字符串操作,例如在Perl中,当你写类似于$x=$y的代码、$y是一个字符串时,赋值操作会将字符串的内容从$y的缓冲区复制到$x的缓冲区。如果这个字符串很长,这个操作的开销就很大。而在Lua中,这个赋值仅仅是一次指针的复制。

然而,这种引用实现会降低特定方式的字符串连接的速度。在Perl中,操作$s = $s . "x"和$s .= "x"区别非常大,对于前者,你获得了$s的一个拷贝,并且追加"x"到它的尾部;而对于后者,"x"只是简单地被追加到$s所维护的内部缓冲区的尾部。因此,后者无关于字符串的长度(假设缓冲区足够放下追加的文本)。如果把这两句代码放进循环里,它们的区别就是线性和二次算法的区别。例如,下述循环需要大约五分钟来读取一个5MB的文件:
$x = "";
while (<>)
{
    $x = $x . $_;
}
</div>
如果我们把
$x = $x . $_
</div>
改为
$x .= $_
</div>
耗时将会降低为0.1秒!

Lua没有提供第二种,也就是更快速的方式,因为它的变量没有内部缓冲区。因此,我们需要一个显式的缓冲区:一个包含字符串片段的表来完成这项工作。下面的循环读取相同的5MB的文件,需要0.28秒,虽然没有Perl那么快,也还算不错:
local t = {}
for line in io.lines() do
    t[#t + 1] = line
end
s = table.concat(t, "\n")
</div>

[1] 内部化,原文internalize

</div>

您可能想查找下面的文章:

  • Lua性能优化技巧(六):最后的提示
  • Lua性能优化技巧(五):削减、重用和回收
  • Lua性能优化技巧(四):关于字符串
  • Lua性能优化技巧(三):关于表
  • Lua性能优化技巧(二):基本事实
  • 编写高性能Lua代码的方法

相关文章

  • Lua所有内置函数罗列
  • Lua入门学习笔记
  • Lua教程(三):C语言、C++中调用Lua的Table示例
  • Lua中的模块与module函数详解
  • Lua中rawset和rawget的作用浅析
  • Lua学习笔记之表和函数
  • Lua中关系运算符的使用教程
  • Lua脚本语言概述
  • 基于 aLi Lua Web Server 的一个简单例子
  • Lua中使用二维数组实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Lua中的捕获机制和转换技巧介绍
    • Lua中的控制结构(流程控制)简明总结
    • Lua中的模块与module函数详解
    • Lua教程(三):表达式和语句
    • Lua的协程(coroutine)简介
    • Lua教程(十一):模块与包详解
    • lua 基础教程
    • Lua中string.len()使用指南
    • Lua常用时间函数使用实例
    • lua日志文件处理代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有