如何优化你的程式码效能

Home Home
引用 | 编辑 弑血
2020-11-03 04:01
楼主
推文 x1
这边我这用一个方法展示,以下是测试展示


先创立需要的脚本(inc)


#include <amxmodx>
#include <engine>



#define PLUGIN "插件名称"
#define VERSION "插件版本"
#define AUTHOR "创作者名称"


// 创立一个广域阵列,1-32给玩家的变数空间
new bool:g_switch[33];



public plugin_init()
{
// 注册普通插件的流程
register_plugin(PLUGIN, VERSION, AUTHOR);

//注册用一个cmd呼叫
register_clcmd("test", "cmd_test");
}


public cmd_test(id)
{
if (!g_switch[id]) //判断如果是false~
g_switch[id] = true; //开启
else
g_switch[id] = false; //关闭
}


// engine.inc 内专用的 client_PostThink (客户端思考),警告(思考速度异常快)


// 主动偷吃效能类型

public client_PostThink(id)
{
//第一关卡

//判断不是活着返回,但是一值回传给is_user_alive的native检测,amxmodx的inc 内 is_user_alive 一直被超高速呼叫
if (!is_user_alive(id))
return;


//第二关卡

//开关如果是关闭就返回,如果是is_user_alive判断是活着才会拼命呼叫g_switch
if (!g_switch[id])
return;

//第三关卡

client_print(id, print_center, ":O");
}


// 不主动偷吃效能类型
public client_PostThink(id)
{
//第一关卡

//开关如果是关闭就返回,但是一值回传给g_switch检测,由于是使用自订的阵列检测,就不用透过回传给inc去特意判断
if (!g_switch[id])
return;

//第二关卡

//判断不是活着返回,如果g_switch被开启后才会拼命呼叫native~,
if (!is_user_alive(id))
return;


//第三关卡

client_print(id, print_center, ":D");
}


第一个是在不吃觉得情况下,被native的is_user_alive偷吃掉很多记忆体...放在思考更明显


第二个是用自定义的g_switch检测,唯有在开启后才会被native的is_user_alive偷吃掉很多记忆体..


教学完毕~ 可以去检查 你自己的插件 有没有一些在没有特别注意的情况下被偷吃掉的native....尤其是放在连续使用的function(函数)的

献花 x4
引用 | 编辑 S3xTy
2020-12-20 07:44
1楼
  
回 覆 锁 定 :

  此回覆已被锁定,只有『管理员及回覆者』看的到 !!!



献花 x0
引用 | 编辑 zzwl1281
2023-02-22 08:38
2楼
  
回 覆 锁 定 :

  此回覆已被锁定,只有『管理员及回覆者』看的到 !!!



献花 x0
引用 | 编辑 zzwl1281
2023-02-22 08:38
3楼
  
回 覆 锁 定 :

  此回覆已被锁定,只有『管理员及回覆者』看的到 !!!



献花 x0