如何優化你的程式碼效能

Home Home
引用 | 編輯 弒血
2020-11-03 04:01
樓主
推文 x0
這邊我這用一個方法展示,以下是測試展示


先創立需要的腳本(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(函數)的

獻花 x3
引用 | 編輯 S3xTy
2020-12-20 07:44
1樓
  
回 覆 鎖 定 :

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



獻花 x0