主頁(yè) > 知識(shí)庫(kù) > Lua性能優(yōu)化技巧(四):關(guān)于字符串

Lua性能優(yōu)化技巧(四):關(guān)于字符串

熱門標(biāo)簽:百度地圖標(biāo)注早餐區(qū)域 怎么去除地圖標(biāo)注 冀州市地圖標(biāo)注 武漢外呼防封系統(tǒng)多少錢 漳州智云呼電話機(jī)器人 新岸線智能電銷機(jī)器人 個(gè)人怎么在地圖標(biāo)注需要的店鋪 清朝地圖標(biāo)注哈爾濱 地圖標(biāo)注大廈

與表類似,了解Lua如何實(shí)現(xiàn)字符串可以讓你更高效地使用它。

Lua實(shí)現(xiàn)字符串的方式與多數(shù)其他腳本語(yǔ)言所采用的兩種主要方式都不相同。首先,Lua中的所有字符串都是內(nèi)部化[1]的,這意味著Lua維護(hù)著任何字符串的一個(gè)單一拷貝。當(dāng)一個(gè)新字符串出現(xiàn)時(shí),Lua檢查是否有現(xiàn)成的拷貝,如果有的話,重用之。內(nèi)部化使得諸如字符串對(duì)比和索引表之類的操作非??焖?,但是會(huì)降低創(chuàng)建字符串的速度。

第二,Lua中的變量從不存儲(chǔ)字符串,只是引用它們。這種實(shí)現(xiàn)方式可以加快很多字符串操作,例如在Perl中,當(dāng)你寫類似于$x=$y的代碼、$y是一個(gè)字符串時(shí),賦值操作會(huì)將字符串的內(nèi)容從$y的緩沖區(qū)復(fù)制到$x的緩沖區(qū)。如果這個(gè)字符串很長(zhǎng),這個(gè)操作的開銷就很大。而在Lua中,這個(gè)賦值僅僅是一次指針的復(fù)制。

然而,這種引用實(shí)現(xiàn)會(huì)降低特定方式的字符串連接的速度。在Perl中,操作$s = $s . "x"和$s .= "x"區(qū)別非常大,對(duì)于前者,你獲得了$s的一個(gè)拷貝,并且追加"x"到它的尾部;而對(duì)于后者,"x"只是簡(jiǎn)單地被追加到$s所維護(hù)的內(nèi)部緩沖區(qū)的尾部。因此,后者無(wú)關(guān)于字符串的長(zhǎng)度(假設(shè)緩沖區(qū)足夠放下追加的文本)。如果把這兩句代碼放進(jìn)循環(huán)里,它們的區(qū)別就是線性和二次算法的區(qū)別。例如,下述循環(huán)需要大約五分鐘來(lái)讀取一個(gè)5MB的文件:

復(fù)制代碼 代碼如下:

$x = "";
while (>)
{
    $x = $x . $_;
}

如果我們把
復(fù)制代碼 代碼如下:

$x = $x . $_

改為
復(fù)制代碼 代碼如下:

$x .= $_

耗時(shí)將會(huì)降低為0.1秒!

Lua沒(méi)有提供第二種,也就是更快速的方式,因?yàn)樗淖兞繘](méi)有內(nèi)部緩沖區(qū)。因此,我們需要一個(gè)顯式的緩沖區(qū):一個(gè)包含字符串片段的表來(lái)完成這項(xiàng)工作。下面的循環(huán)讀取相同的5MB的文件,需要0.28秒,雖然沒(méi)有Perl那么快,也還算不錯(cuò):

復(fù)制代碼 代碼如下:

local t = {}
for line in io.lines() do
    t[#t + 1] = line
end
s = table.concat(t, "\n")

[1] 內(nèi)部化,原文internalize

您可能感興趣的文章:
  • Lua性能優(yōu)化技巧(一):前言
  • Lua性能優(yōu)化技巧(二):基本事實(shí)
  • Lua性能優(yōu)化技巧(三):關(guān)于表
  • Lua性能優(yōu)化技巧(五):削減、重用和回收
  • Lua性能優(yōu)化技巧(六):最后的提示

標(biāo)簽:天門 天門 臺(tái)灣 濰坊 宣城 金昌 德宏 儋州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua性能優(yōu)化技巧(四):關(guān)于字符串》,本文關(guān)鍵詞  Lua,性能,優(yōu)化,技巧,四,關(guān)于,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Lua性能優(yōu)化技巧(四):關(guān)于字符串》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Lua性能優(yōu)化技巧(四):關(guān)于字符串的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章