作者laechan (小太保)
看板mud_sanc
标题Re: [闲聊] 由 mud 产生 html 档
时间Wed Feb 4 12:52:14 2009
※ 引述《cloderw (漫云端)》之铭言:
: ※ 引述《laechan (小太保)》之铭言:
: : str="<body>\n"+
: : "<tr><td>等级</td><td>Id</td><td>昵称</td></tr>\n"+
: : "<tr><td>"+ppl->query("level")+"</td><td>"+ppl->query("name")+
: : "</td><td>"+ppl->query("chi_name")+"</td></tr></body>\n";
: : 如果要显示一个 1000 行的资料,上面的写法是不行的,因为太多的字
: : 串累加,除非是单机型的 mud 不然是跑不动的。
: : 变通的方法则是..
: : str=sprintf("<body>\n<tr><td>%d</td><td>%s</td><td>%s</td></tr></body>\n",
: : ppl->query("level"),ppl->query("name"),ppl->query("chi_name"));
: : 但是要显示 1000 行的资料可能也会有点吃力。总之,还有其它的方法
: : Laechan
: MudOS 在处理字串累加上效能的确是相当差
: 有一种作法是先利用字串阵列分批储存字串後
: 最後再用 implode efun 一次结合起来
: 如此可以大量减少 MudOS 内部重覆执行 malloc 与 strcpy 的动作
: 例:
: string *texts = allocate(1000);
: for(int i=0;i<1000;++i)
: texts[i] = sprintf("anything you want");
: return implode(texts, "");
: 这样可以大幅减低单纯因文字处理的效能损耗
: 剩下的效能瓶颈则是卡在 ppl->query 这个 call_out 与 query 的本身运算
欢迎 rw 的 clode 来访^^
这个我有在圣殿的 skilldata allskill -skill 指令实作过,
不过那时我没有预先 allocate,而是用阵列 += 的方式,之後
才用 allocate。
我之後使用的其它做法,是用少量递回的方式,把一次性累加
分 2~3 次完成(依资料量决定)。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 218.170.230.44 (02/04 12:53)