Fórum DataSnap + JSONARRAY #418570
15/06/2012
0
Existe outro meio de se transferir colecoes do servidor para o cliente que nao seja usando JSONARRAY?
Minha ideia era usar algo como um DBXREADER, só que até onde sei, o DBXREADER só retorna dados de uma consulta SQL. O que quero é gerar manualmente esses dados e retorna-los.
Cleidson Silva
Curtir tópico
+ 0Posts
15/06/2012
Marco Salles
Gostei + 0
16/06/2012
Cleidson Silva
Gostei + 0
16/06/2012
Marco Salles
Pq o Json tem dois métodos UnMarshal e o Marshal que ajuda muito neste tipo de transferencia
Vc trasforma o Objeto em Json -->> Envia
recebe -->> Converte o Json em Objeto
Gostei + 0
18/06/2012
Cleidson Silva
O que estou enviando é uma classe simples, com uns 5 campos string;
Gostei + 0
18/06/2012
Marco Salles
O que estou enviando é uma classe simples, com uns 5 campos string;
Então , mas parece que vc esta indo na contramão do que a tecnologia recemenda..
Mas vamos tentar mandar esses dados (coleção) atraves de OleVarint (formato TDataPAcker) ou mesmo
String (Formato TDataPacher) ... O que vc acha ???
Gostei + 0
18/06/2012
Cleidson Silva
Desde já obrigado pelas dicas.
Não sou um expert em materia de DATASNAP e JSON. Se fazer a conversão dos objetos pra json e envia-los via JSONARRAY for mesmo a melhor forma, então eu já estou fazendo isso. Minha dúvida era se existiria ou não um método mais apropriado pra enviar uma coleção grande de objetos. Em um dos casos, eu troquei a coleção que estava enviando via JSONARRAY por um TDBXREADER e a diferença de performance foi muito grande. Mas nesse caso em especial, não posso usar o DBXREADER (ate onde sei).
A propósito, ainda não sei como usar TDATAPACKER e não achei nenhum material falando sobre o assunto. Teria alguma documentação ou exemplo ai? hehe.
Gostei + 0
18/06/2012
Marco Salles
No servidor
Gravar os Objetos no Cds
Supor Objeto pessoa
Nome
endereco
CPF
Carregar um Cds onde cada registro é um Objeto
O que vc vai enviar sera o XMLData Deste Cds .. O XmlData é o TdataPacker em formato String , tem todos os registros
Bo cliente Vc ira receber este XmlData e carregar um ClientdataSet com a mesma estrutura do Cds do servidor que foi utilizado para montar
Logo vc faz o Processo inverso para ter os objetos desta Colecao
ps) Sinceramente , tem que ver a performance . Comece o exemplo com um Objeto Simples e faça-o funcionar , depois expanda o Modelo para a sua real necessidade ..
Gostei + 0
18/06/2012
Cleidson Silva
Usando JSONARRAY:
13 segundos para ler os dados e jogar num memo
10 segundos para ler somente em memoria
Usando CLIENTDATASET
3 segundos para ler os dados e jogar num memo
<1 segundo para ler somente em memoria
Ou seja, como eu havia suspeitado, JSONARRAY é legal pra pouca coisa, para uma quantidade maior de informações essa outra técnica que você sugeriu funciona muuuuuuuito melhor.
hehe. Valeu pela dica!!
function TServerMethods1.GetArrayPessoas: TJSONARRAY;
var
p: tpessoa;
I: Integer;
begin
Result := TJSONARRAY.Create;
for I := 1 to 3000 do
begin
p := tpessoa.Create;
p.Nome := Pessoa: + inttostr(I);
p.Endereco := Endereco: + inttostr(I);
p.Telefone := (62) 9999-9999;
Result.AddElement(tpessoa.ConvertToJson(p));
end;
end;
function TServerMethods1.GetDataSetPessoas: string;
var
p: tpessoa;
I: Integer;
c: tclientdataset;
begin
try
c := tpessoa.CreateDataSet;
for I := 1 to 3000 do
begin
c.Insert;
c.FieldByName(Nome).AsString := Pessoa: + inttostr(I);
c.FieldByName(Endereco).AsString := Endereco: + inttostr(I);
c.FieldByName(Telefone).AsString := (62) 9999-9999;
end;
c.Post;
Result := c.XMLData;
finally
c.Free;
end;
end;
Gostei + 0
21/06/2012
_nekinho_
for I := 1 to 3000 do
begin
p := tpessoa.Create; <-- Ta criando o tempo todo tpessoa;
p.Nome := Pessoa: + inttostr(I);
p.Endereco := Endereco: + inttostr(I);
p.Telefone := (62) 9999-9999;
Result.AddElement(tpessoa.ConvertToJson(p));
end;
// Vai gera um vazamento d memoria graaaaaaaaaaaaaaande!
// Teoricamente JSON é para ser mais rápido que XML
Abraços
Gostei + 0
21/06/2012
Marco Salles
Vc pode destruir todos os Objetos Pessoa , porque o mesmo serão convertidos em String bem formatadas (Notação JSON)
O que pode estar ocasionando esta demorada seje a quantidade de mémoria ocupada , o computador tende a ser tonar mais lento
Qualquer dúvida montamos um exemplo
[]sds
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)