| 弑血 
         
       
  
 | 分享:            ▼         
 [插件] 如何优化你的程式码效能
                      
                        
                        
                          |  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(函数)的
 
 
 [ 此文章被弑血在2020-11-03 04:07重新编辑 ] 
 
 
 |