[Include] Bini (INI FILES) Versao 4
#1

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

A funзгo write apesar de ser mais rбpida que todos os outros sistemas de arquivos ainda precisa de alguns ajustes de velocidade e estabilidade, entгo eventuais atualizaзхes estгo para surgir

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;
}
NOVOS TESTES DE VELOCIDADES SERГO ACEITOS

Usando
Para usar Bini й bastante simples! Basta fazer o seguinte:

Escrevendo:

Nъmeros
pawn Код:
INI_WriteInt("arquivo.ini", "key", valor);
Textos:
pawn Код:
INI_WriteString("arquivo.ini", "key", "valor");
Lendo valores:

Nъmeros
pawn Код:
INI_ReadInt("arquivo.ini", "key")

Textos
pawn Код:
INI_ReadString("arquivo.ini", "key")
Entгo sempre deixe:
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

e nгo
Quote:

key = value

http://en.wikipedia.org/wiki/INI_file

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")
Download
-> 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
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
Desenvolvimento Geral:
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 ©
Reply
#2

Muita gente aн que acabou de aprender DOF2 e nгo sabe usar Bini vai ficar meio irritado, pois jб vai ter que aprender por ser mais rбpido kkk
Parabйns ^^
Reply
#3

A forma de uso й a mesma do DOF2. O que muda й o nome das funзхes


Mas nгo se engane, BINI nгo funciona com arquivos do DOF2 (dof 2 coloca espaзo entre ' = ' logo voce vai ter que pegar as keys com um espaзo no final). Pelo menos por enquanto.
Reply
#4

Aprendi DOF2 a pouco tempo, irei passar para BINI '-'
Muito bom Drakins, gostei da include pela rapidez!
Reply
#5

Quote:
Originally Posted by EditPawn
Посмотреть сообщение
Aprendi DOF2 a pouco tempo, irei passar para BINI '-'
Muito bom Drakins, gostei da include pela rapidez!
Estamos ainda em fase beta-teste. Se APARECER bugs peзo que me avise imediatamente.

Novos testes de velocidade c/ imagem serгo bem vindos !!


@ 3000 posts novamente '-'
# Aparecer, nгo aprender UHSUHAs
Reply
#6



xD


Parabйns pela INC vou utilizar =)
Reply
#7

Quote:
Originally Posted by BreakDriFT
Посмотреть сообщение


xD


Parabйns pela INC vou utilizar =)
As velocidades de leitura giram em torno de 8 vezes mais rбpido que DOF2
Reply
#8

E para verificar se o arquivo existe? Teria que usar if(fexist ... ?

Pois se utilizar o
pawn Код:
if(INI_Open("arquivo.ini"))
ele jб cria, pelo menos nas versхes antigas... '-'
Reply
#9

Quote:
Originally Posted by humildadeforever
Посмотреть сообщение
E para verificar se o arquivo existe? Teria que usar if(fexist ... ?

Pois se utilizar o
pawn Код:
if(INI_Open("arquivo.ini"))
ele jб cria, pelo menos nas versхes antigas... '-'
Para verificar se o arquivo existe usa-se: fexist

Nгo necessita mais usar INI_Open. Internamente ele jб faz isto em INI_Write e INI_Read. Mas precisa checar se o arquivo existe para fazer as modificaзхes e leitura
Reply
#10

Quote:
Originally Posted by [FeK]DraKiNs
Посмотреть сообщение
Para verificar se o arquivo existe usa-se: fexist

Nгo necessita mais usar INI_Open. Internamente ele jб faz isto em INI_Write e INI_Read. Mas precisa checar se o arquivo existe para fazer as modificaзхes e leitura
Ah, acertei *-* kkkk
Vlw por esclarecer minha dъvida, уtimo trabalho.
Reply
#11

Vou estudб-la melhor tambйm.
Parabйns Bruno!
Reply
#12

Nice job dude!
As funзхes sгo quase todas iguais a SII, isso й bom para quem usa
Reply
#13

Quote:
Originally Posted by Bruno Pereira
View Post
Nice job dude!
As funзхes sгo quase todas iguais a SII, isso й bom para quem usa
Eu tentei trocar as includes SII para bini com as mesmas funзхes mais gerou erro pra caramba ...

Mais й bacana essa include. Muito boa e muito rбpida.
Reply
#14

Nгo vou usar , mas bom trabalho desenvolvendo ..
Muitas das vezes algumas includes suas de salvar/carregar tem muitos bugs, e vocк nem da continuidade nelas.. (fini, etc)
(sem te desmerecer, claro)
Reply
#15

Quote:
Originally Posted by Ricop522
View Post
Nгo vou usar , mas bom trabalho desenvolvendo ..
Muitas das vezes algumas includes suas de salvar/carregar tem muitos bugs, e vocк nem da continuidade nelas.. (fini, etc)
(sem te desmerecer, claro)
E quando lancei Bini nгo deixei claro que ela seria uma continuaзгo de Fini? Ah, vou novamente dizer

Bini й uma versгo PУS FINI

Quote:
Originally Posted by [BPW]Wesley
View Post
Eu tentei trocar as includes SII para bini com as mesmas funзхes mais gerou erro pra caramba ...

Mais й bacana essa include. Muito boa e muito rбpida.
Nгo cara, nгo й a mesma coisa que SII. Й um pouco diferente:

pawn Code:
INI_WriteString("key", "value") // sii
INI_WriteString("arquivo", "key", "value") // bini
Bini nгo usa mais INI_Open. Internamente ele jб faz isto. BINI й IGUAL DOF2. O que muda й o nome das funзхes, que sгo iguais ao SII. Exceto o uso, que й igual a DOF2. Entendeu??
Reply
#16

Sу pra constar. Apenas a ъltima versгo de Fini veio a ocorrer bugs. Por este motivo eu demorei um certo periodo atй desenvolver Bini. Em relaзгo a BINI, NUNCA TIVE PROBLEMAS. Em todas as versхes sempre foram bem testadas

Estб versгo atual ainda estб em testes, pode apresentar bugs? Pode! Mas estou com bastante tempo para testes nels
Reply
#17

Oww, Уtima include! Conseguiu melhor velocidade em cima do DOF2 sem ter que abrir e fechar o arquivo manualmente! ++REP
pawn Code:
#define DarRep(%0,%1) SetPVarInt(%0, #Rep, (GetPVarInt(%0, #Rep)+%1)); //By. Paulo_TerroR
@Edit
LoL, nunca te dei REP.
BUG: You must spread some Reputation around before giving it to [FeK]DraKiNs again.
Reply
#18

Melhor include do mundo! Vou utilizar no meu servidor com certeza..

Motivo:

DOF2 - Nгo salva meus usuarios nem б pau!

Bini - Й quase Dini.. Dini salva kk!
Reply
#19

Drakins, essa include й igual a SII, que nгo pode editar nada pela pasta, sу in-game?
Reply
#20

Quote:
Originally Posted by Bruno Pereira
View Post
Drakins, essa include й igual a SII, que nгo pode editar nada pela pasta, sу in-game?
Pode editar pela pasta sim. Eu uso fwrite
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)