弒血
|
分享:
▼
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重新編輯 ]
|