24.06.2012, 13:08
(
Последний раз редактировалось ipsBruno; 01.07.2012 в 06:28.
)
Bini 4
Apуs algumas semanas de desenvolvimento da nova versгo de Bini. Finalmente consigo acaba-la.
A nova versгo de Bini nгo conta com muitas alteraзхes, exceto a engine de manipulaзгo de arquivos na memуria. Desta vez utiliza memуria cache mais avanзada usando Setproperty e Getproperty!
BINI FOI ATUALIZADO DA ЪLTIMA VEZ 1/07 as 3:39. Agora o modo de uso й igual DINI. Nгo precisa dar OPEN, NEM CLOSE. Muito menos SAVE
Por mais que nгo seja necessбrio o uso de INI_Save. Aconselha o USO DA MESMA, pois em caso de crashs ou eventuais bugs no seu servidor decorrente em outros fatores, alguns arquivos podem ser perdidos !!
Velocidade
Com esta nova engine, a velocidade foi bastante aprimorada. O que jб era rбpido ficou mais rбpido ainda
Quote:
[09:59:37] [00:57:47] Bini -> write 3304 ms - read 32 ms - read/write 3336 ms [00:57:47] Dof2 -> write 3557 ms - read 258 ms - read/write 3815 ms |
Cуdigo usado para teste de velocidade:
pawn Код:
main() {
DOF2_CreateFile("ipsBruno1");
DOF2_CreateFile("ipsBruno2");
new dof[3];
dof[0] = GetTickCount();
dof[2] = GetTickCount();
for(new i; i != 3000; i++) {
DOF2_SetInt("ipsBruno1", "teste1", 1000);
DOF2_SetInt("ipsBruno1", "teste2", 2000);
DOF2_SetInt("ipsBruno1", "teste3", 3000);
DOF2_SetInt("ipsBruno1", "teste4", 4000);
DOF2_SetInt("ipsBruno1", "teste5", 5000);
DOF2_SetInt("ipsBruno1", "teste6", 6000);
DOF2_SetInt("ipsBruno1", "teste7", 7000);
DOF2_SetInt("ipsBruno1", "teste8", 8000);
DOF2_SetInt("ipsBruno1", "teste9", 9000);
DOF2_SetInt("ipsBruno1", "teste10", 10000);
DOF2_SetInt("ipsBruno1", "teste11", 11000);
DOF2_SaveFile();
}
dof[0] = GetTickCount() - dof[0];
dof[1] = GetTickCount();
for(new i; i != 3000; i++) {
DOF2_GetInt("ipsBruno1", "teste1");
DOF2_GetInt("ipsBruno1", "teste2");
DOF2_GetInt("ipsBruno1", "teste3");
DOF2_GetInt("ipsBruno1", "teste4");
DOF2_GetInt("ipsBruno1", "teste5");
DOF2_GetInt("ipsBruno1", "teste6");
DOF2_GetInt("ipsBruno1", "teste7");
DOF2_GetInt("ipsBruno1", "teste8");
DOF2_GetInt("ipsBruno1", "teste9");
DOF2_GetInt("ipsBruno1", "teste10");
DOF2_GetInt("ipsBruno1", "teste11");
}
dof[1] = GetTickCount() - dof[1];
dof[2] = GetTickCount() - dof[2];
//
new bin[3];
bin[0] = GetTickCount();
bin[2] = GetTickCount();
for(new i; i != 3000; i++) {
INI_WriteInt("ipsBruno2", "teste1", 1000);
INI_WriteInt("ipsBruno2", "teste2", 2000);
INI_WriteInt("ipsBruno2", "teste3", 3000);
INI_WriteInt("ipsBruno2", "teste4", 4000);
INI_WriteInt("ipsBruno2", "teste5", 5000);
INI_WriteInt("ipsBruno2", "teste6", 6000);
INI_WriteInt("ipsBruno2", "teste7", 7000);
INI_WriteInt("ipsBruno2", "teste8", 8000);
INI_WriteInt("ipsBruno2", "teste9", 9000);
INI_WriteInt("ipsBruno2", "teste10", 10000);
INI_WriteInt("ipsBruno2", "teste11", 11000);
INI_Save();
}
bin[0] = GetTickCount() - bin[0];
bin[1] = GetTickCount();
for(new i; i != 3000; i++) {
INI_ReadInt("ipsBruno2", "teste1");
INI_ReadInt("ipsBruno2", "teste2");
INI_ReadInt("ipsBruno2", "teste3");
INI_ReadInt("ipsBruno2", "teste4");
INI_ReadInt("ipsBruno2", "teste5");
INI_ReadInt("ipsBruno2", "teste6");
INI_ReadInt("ipsBruno2", "teste7");
INI_ReadInt("ipsBruno2", "teste8");
INI_ReadInt("ipsBruno2", "teste9");
INI_ReadInt("ipsBruno2", "teste10");
INI_ReadInt("ipsBruno2", "teste11");
}
bin[1] = GetTickCount() - bin[1];
bin[2] = GetTickCount() - bin[2];
printf("Bini -> write %d ms - read %d ms - read/write %d ms", bin[0], bin[1], bin[2]);
printf("Dof2 -> write %d ms - read %d ms - read/write %d ms", dof[0], dof[1], dof[2]);
return true;
}
public OnFilterScriptExit() {
DOF2_Exit();
INI_Exit();
return true;
}
Usando
Para usar Bini й bastante simples! Basta fazer o seguinte:
Escrevendo:
Nъmeros
pawn Код:
INI_WriteInt("arquivo.ini", "key", valor);
pawn Код:
INI_WriteString("arquivo.ini", "key", "valor");
Nъmeros
pawn Код:
INI_ReadInt("arquivo.ini", "key")
Textos
pawn Код:
INI_ReadString("arquivo.ini", "key")
pawn Код:
public OnFilterScriptExit() {
INI_Exit();
return true;
}
** Importante
- Se vocк tem arquivos escritos por DOF2 ou Y_Ini este sistema nгo serб compatнvel pois meu sistema usa o mйtodo formal para escrita de escrita em arquivos ini, sem espaзo entre as keys
Quote:
key=value |
Quote:
key = value |
Porйm й TOTALMENTE compatнvel com Dini e outros sistemas conhecidos
Funзхes disponнveis:
pawn Код:
// Funзхes Atuais:
// CallBack INI_WriteString("arquivo", "key", "valor")
// CallBack INI_WriteFloat("arquivo"",key", valor)
// CallBack INI_WriteInt("arquivo","key", valor)
// CallBack INI_WriteBool("arquivo","key", bool:valor)
// CallBack INI_ReadString("arquivo", "key")
// CallBack INI_ReadInt("arquivo", "key")
// CallBack INI_ReadFloat("arquivo","key")
// CallBack INI_ReadBool("arquivo","key")
// CallBack INI_Create("arquivo")
// CallBack INI_Delete("arquivo")
// CallBack INI_Open("arquivo")
-> http://pastebin.com/gjEJMnH5
Com estб velocidade й permitido que vocк possa colocar em atй 50 escritas/leituras em OnPlayerUpdate
Salve em bini.inc por favor.
FAQ
Antes de seguir as resoluзхes de problemas abaixo verifique sua versгo й atual. Baixando esta:
http://pastebin.com/gjEJMnH5
Arquivo nгo salvando
Caso for um ъnico arquivo, veja se
Se nгo estiver salvando o ъltimo arquivo й porque o servidor nгo estб sendo fechado corretamente. Quando vocк nгo fecha por RCON EXIT o OnGameModeExit/FilterScriptExit nгo sгo chamados e logo INI_Exit tambйm nгo й !!
Caso for vбrios arquivos tente aumentar o valor max_lines_file para acima de 999
Exemplo
pawn Код:#define max_lines_file 5000
Servidor crashando
Certifique-se se antes de usar algum arquivo INI_Open/INI_READ o arquivo existe. Use
pawn Код:if(fexist(#arquivo.ini)) // o arquivo existe
Ocupando muito AMX
Desenvolvimento Geral:Nem sempre o que ocupa muito amx й lento. Bini usa um sistema avanзado de cache, onde tudo й registrado no amx em tempo real. Mas й tudo registrado no AMX, nгo ocupa nada de memуria do seu computador. Sу ocuparб memуria se de alguma forma outros fatores externos a Bini ultrapassarem isto.
http://pt.wikipedia.org/wiki/Cache
Desenvolvido por Bruno da Silva
Agradecimentos a:
Leonado1434 (achou um pequeno bug em INI Open)
[S]trong (me ajudou na primeira versгo da include.)
Projeto [iPs]TeaM ©