lua入门笔记7 字符串库

lua入门笔记7 字符串库,第1张

1先链接mysql,按照广告分类ID读取广告列表,转换为json字符

2链接redis,将广告列表json字符串存入redis

3在/root/lua目录下创建ad_loadlua ,实现连接mysql 查询数据 并存储到redis中

4改/usr/local/openresty/nginx/conf/nginxconf文件

重新启动nginx

先讲讲我知道的一些应用。

首先是在i OS下写游戏,《愤怒小鸟》就是用lua写的;同时,也好多用其它语言在为Iphone写游戏的程序员,添加lua到游戏开发中去,让过程更简单。当然,Lua最著名的应用是在暴雪公司的网络游戏《魔兽世界》中----在网上可以找到好多用lua做的wow小工具。

然后是一些小的程序,这个和我的目标一致,一些简单的测试用例可以用lua来写,比如可以在百度找得到的‘康泰串口程序’,还在百度文库发现一篇,有在用lua开发测量仪器上位机测试程序的例子(好处是用c写完一些固定的调用后,用lua简单配置一下,又是另外一个测试程序,写完就可以用)。

Unified Configuration Interface

讲点其它细节。

lua是动态语言,它的解释器现在有用各种主流语言完成的各种版本,c、java应有尽有。你的程序需要做config吗?lua应该是个不错的选择。或者,找现成的lua解释器过来,你可以再添加好你的库,完全直接执行脚本也行。

有人把它和python作比较,可能是应用领域的关系,那个家伙讲,他觉得lua会比python好用。在lua的官网可以看到他们吹水记录,不贴连接了。

网上下的某PPT里这么讲,Lua最引人注目的特点:

--以极小 的体积和简单 的语法提供相对全面的功能。

--以简洁 的API实现与宿主语言最方便 的接口。

Lua 没有打算被用来进行大型的程序设计,相反,Lua 定位于中小型程序设计,通常是作为大型系统的一部分,常用于一个或少数程序员开发的情况,甚至是由非程序员进行的开发。所以,Lua 避免了过分的冗余和过多的人为限制。如果你不希望一个对象的内部结构被访问,那么就不要去访问它们。

分两步走,第一步,C语言如何把数据存到数据库?

方法很多,可以考虑VC的库函数。

第二步,如何用宿主语言调用LUA?这方面的资料也不少,我感觉,用C把数据存到数据库工作量能更大些。

给你点参考资料 :

之前研究lua中字符串拼接,看了一些文章都说 "tableconcat" 高于 ""。最近项目做优化,发现项目中使用tableconcat的效率并不比高,所以实际测试了一下。

1、一些文章说的"tableconcat" 高于 "",是在特定环境中才有效的,看一下他们使用的测试用例:

local str = "a"

local count = 100000

local start_time = osclock()

local result = ""

for i=1,count do

    result = result str

end

print("operatorConcatTime:" osclock() - start_time)

local tbl = {}

for i=1,count do

    tableinsert( tbl,str)

end

tableconcat(tbl)

print("tableConcatTime:" osclock() - start_time)

运行后测试结果如上图,运行效率明显tableconcat远高于。在上述测试用例中,“” 每次只拼接一个字符串,一共拼了10000次。“”每次拼接都会产生一个新的字符串,而在lua中每产生一个新的字符串都需要将该字符串存放在全局状态表(global_State)的 strt 域中,随着拼接次数增大,就会需要更大的空间存储新的字符串,当达到一定大小时,旧的字符串就需要GC,伴随着不断的开辟新空间和GC,就导致性能降低。 而tableconcat 底层拼接字符串的方式也是使用运算符 ,但是其使用算法减少了使用运算符的次数,减少了GC,从而提高效率。主要思路:采用二分思想,用栈存储字符串,新入栈的字符串与下方的字符串比较长度,大于则使用运算符拼接成新字符串,并移除栈顶的字符串,不断向下直至遇到长度更大的字符串或者栈底,这样保持最大的字符串位于栈底,栈呈现金字塔的形状,最终在使用运算符将栈中的字符串拼接成最终的字符串。引用( Lua大量字符串拼接方式效率对比及原因分析_AaronChan的博客-CSDN博客_lua 字符串拼接 )。

2、而在实际项目中一般都是几个字符串的拼接,拼接频次高,拼接个数少。针对项目中实际情况,写了如下测试用例测试:

(1)测试用例1:

function global_SpliceString ()

     local t = { }

    return tableconcat (t)

end

local count = 10 000

local sM1 = 0

local sM2 = 0

local start_time

collectgarbage("collect")

sM1 =collectgarbage("count")

print("sM1:",sM1)

local result = ""

start_time = osclock()

for i = 1, count do            

     result =global_SpliceString("SELECT FROM ", "QuestPlot", "WHERE sn='", i, "'")

end

print("CostTime:",(osclock() - start_time))

sM2 =collectgarbage("count")

print("sM2:",sM2)

print("Genery Mem ory:" , (sM2 - sM1))

(2)测试用例2:

local  count = 10 000

local  sM1 =  0

local  sM2 =  0

local start_time

collectgarbage("collect")

sM1 = collectgarbage("count")

print("sM1:",sM1)

local result = ""

start_time = osclock()

for i = 1, count do

     result = "SELECT FROM" "QuestPlot" " WHERE sn='" i "'"

end

print("CostTime:",(osclock() - start_time))

sM2 =collectgarbage("count")

print("sM2:",sM2)

print("Genery Memory:",(sM2 - sM1))

(3)测试用例3:

local tb = {[1]= "SELECT FROM ", [2] = "QuestPlot", [3] = " WHEREsn='", [4] = 100101, [5] = "'"}

collectgarbage("collect")

sM1 =collectgarbage("count")

print("sM1:",sM1)

local result = ""

start_time = osclock()

for i = 1, count do

     tb[4] = i

     result = tableconcat( tb )

end

print("CostTime:",(osclock() - start_time))

sM2 =collectgarbage("count")

print("sM2:",sM2)

print("Genery Memory:",(sM2 - sM1))

测试结果如下所示:

(1)global_SpliceString:

(2)

(3)tableconcat:

为了模仿更真实的使用环境,以上三个测试用例中要拼接的字符串都有一个动态变化的字符串。通过结果比对,测试用例2和用例3的耗时和内存相差无几,而测试用例1的耗时和内存明显高出很多。通过查看lua源码知道,在一个语句中用“”连续拼接几个字符串并不会产生中间字符串,而是会把所有需要连接的字符串都收集起来一起连接。所以tableconcat和“”的方式相差无几。再看测试用例1,同样使用tableconcat,为什么用例1的耗时和内存明显增多。 是因为在 gobal_SpliceString() 方法中的 local  t = { }, 每次调用这个方法都需要先构造一个table,然后才能使用tableconcat。而table在lua中也属于GC对象,table的创建需要消耗更多时间和内存。同时调用global_SpliceString也会有函数调用消耗,所以用例1的性能消耗是由构造table导致的。

3、总结:

通过以上分析,我们不能简单的说tableconcat和“”谁的性能更好,还要根据具体使用场景,具体问题具体分析。一般如果一次拼接大量字符串并且要拼接的字符串基本都是固定的,可以使用table缓存起来,使用tableconcat拼接;如果是动态的且比较少的字符串拼接,可以直接在一个语句中使用“”连续拼接。

以上就是关于lua入门笔记7 字符串库全部的内容,包括:lua入门笔记7 字符串库、《Lua程序设计》之 数值、LUA语言入门等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10080761.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存