婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Lua性能優(yōu)化技巧(一):前言

Lua性能優(yōu)化技巧(一):前言

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

和在所有其他編程語(yǔ)言中一樣,在Lua中,我們依然應(yīng)當(dāng)遵循下述兩條有關(guān)程序優(yōu)化的箴言:

原則1:不要做優(yōu)化。
原則2:暫時(shí)不要做優(yōu)化(對(duì)專家而言)。

這兩條原則對(duì)于Lua編程來說尤其有意義,Lua正是因其性能而在腳本語(yǔ)言中鶴立雞群。

當(dāng)然,我們都知道性能是編程中要考量的一個(gè)重要因素,指數(shù)級(jí)時(shí)間復(fù)雜度的算法會(huì)被認(rèn)為是棘手的問題,絕非偶然。如果計(jì)算結(jié)果來得太遲,它就是無用的結(jié)果。因此,每一個(gè)優(yōu)秀的程序員都應(yīng)該時(shí)刻平衡在優(yōu)化代碼時(shí)所花費(fèi)的資源和執(zhí)行代碼時(shí)所節(jié)省的資源。

優(yōu)秀的程序員對(duì)于代碼優(yōu)化要提出的第一個(gè)問題是:“這個(gè)程序需要被優(yōu)化嗎?”如果(僅當(dāng)此時(shí))答案是肯定的,第二個(gè)問題則是:“在哪里優(yōu)化?”

要回答這樣兩個(gè)問題,我們需要制定一些標(biāo)準(zhǔn)。在進(jìn)行有效的性能評(píng)定之前,不應(yīng)該做任何優(yōu)化工作。有經(jīng)驗(yàn)的程序員和初學(xué)者之前的區(qū)別并非在于前者善于指出一個(gè)程序的主要性能開銷所在,而是前者知道自己不善于做這件事情。

幾年前,Noemi Rodriguez和我開發(fā)了一個(gè)用于Lua的CORBA ORB[2]原型,之后演變?yōu)镺iL。作為第一個(gè)原型,我們的實(shí)現(xiàn)的目標(biāo)是簡(jiǎn)潔。為防止對(duì)額外的C函數(shù)庫(kù)的依賴,這個(gè)原型在序列化整數(shù)時(shí)使用少量四則運(yùn)算來分離各個(gè)字節(jié)(轉(zhuǎn)換為以256為底),且不支持浮點(diǎn)值。由于CORBA視字符串為字符序列,我們的ORB最初也將Lua字符串轉(zhuǎn)換為一個(gè)字符序列(也就是一個(gè)Lua表),并且將其和其他序列等同視之。

當(dāng)我們完成這個(gè)原型之后,我們把它的性能和一個(gè)使用C++實(shí)現(xiàn)的專業(yè)ORB進(jìn)行對(duì)比。由于我們的ORB是使用Lua實(shí)現(xiàn)的,預(yù)期上我們可以容忍它的速度要慢一些,但是對(duì)比結(jié)果顯示它慢得太多了,讓我們非常失望。一開始,我們把責(zé)任歸結(jié)于Lua本身;后來我們懷疑問題出在那些需要序列化整數(shù)的操作上。我們使用了一個(gè)非常簡(jiǎn)單的性能分析器(Profiler),與在《Lua程序設(shè)計(jì)》[3]第23章里描述的那個(gè)沒什么太大差別。出乎我們意料的是,整數(shù)序列化并沒有明顯拖慢程序的速度,因?yàn)椴]有太多整數(shù)需要序列化;反而是序列化字符串需要對(duì)低性能負(fù)很大責(zé)任。實(shí)際上,每一條CORBA消息都包含若干個(gè)字符串,即使我們沒有顯式地操作字符串亦是如此。而且序列化每一條字符串都是一個(gè)性能開銷巨大的工作,因?yàn)樗枰獎(jiǎng)?chuàng)建一個(gè)新表,并使用單獨(dú)的字符填充;然后序列化整個(gè)序列,其中需要依次序列化每個(gè)字符。一旦我們將字符串序列化作為一種特殊情況(而不是通過通用的序列化流程)重新實(shí)現(xiàn),整個(gè)程序的性能就得到了顯著的提升。我們只是添加了幾行代碼,程序的性能已經(jīng)和C++實(shí)現(xiàn)的那個(gè)版本有得一拼了[4]。

因此,我們總是應(yīng)該在優(yōu)化性能之前進(jìn)行性能測(cè)試。通過測(cè)試,才能了解到要優(yōu)化什么;在優(yōu)化后再次測(cè)試,來確認(rèn)我們的優(yōu)化工作確實(shí)帶來了性能的提升。

一旦你決定必須優(yōu)化你的Lua代碼,本文將可能有所幫助。本文描述了一些優(yōu)化方式,主要是展示在Lua中怎么做會(huì)更慢,怎么做又會(huì)更快。在這里,我將不會(huì)討論一些通用的優(yōu)化技巧,例如優(yōu)化算法等等——當(dāng)然,你應(yīng)該掌握和使用這些技巧,有很多其他地方可以了解這方面的內(nèi)容。本文主要討論一些專門針對(duì)Lua的優(yōu)化技巧,與此同時(shí),我還會(huì)持續(xù)地測(cè)試小程序的時(shí)間和空間性能。如果沒有特別注明的話,所有的測(cè)試都在一臺(tái)Pentium IV 2.9GHz、1GB內(nèi)存、運(yùn)行Ubuntu 7.10、Lua 5.1.1的機(jī)器上進(jìn)行。我經(jīng)常會(huì)給出實(shí)際的測(cè)量結(jié)果(例如7秒),但是這只在和其他測(cè)量數(shù)據(jù)進(jìn)行對(duì)比時(shí)有意義。而當(dāng)我說一個(gè)程序比另一個(gè)快X%時(shí),意味著前者比后者少消耗X%的時(shí)間(也就是說,比另一個(gè)程序快100%的程序的運(yùn)行不需要時(shí)間);當(dāng)我說一個(gè)程序比另一個(gè)慢X%時(shí),則是說后者比前者快X%(意即,比另一個(gè)程序慢50%的程序消耗的時(shí)間是前者的兩倍)。

您可能感興趣的文章:
  • Lua性能優(yōu)化技巧(二):基本事實(shí)
  • Lua性能優(yōu)化技巧(三):關(guān)于表
  • 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)鍵詞  Lua,性能,優(yōu)化,技巧,一,前言,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Lua性能優(yōu)化技巧(一):前言》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Lua性能優(yōu)化技巧(一):前言的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 莱州市| 平南县| 行唐县| 大悟县| 黄梅县| 密云县| 黔西| 登封市| 揭东县| 司法| 镇安县| 道真| 富阳市| 巴林左旗| 正阳县| 乌拉特后旗| 瑞金市| 台南市| 五河县| 全南县| 颍上县| 黔南| 浪卡子县| 泽库县| 监利县| 大竹县| 新龙县| 葫芦岛市| 连南| 岳池县| 昌平区| 东山县| 芒康县| 宣化县| 苏尼特右旗| 龙南县| 闸北区| 台东市| 宾川县| 中山市| 德格县|