Isse é o tipo de problema que me dá água na boca! Vamos lá. Seu problema pode ser resolvido com a estrutura de dados FIFO (First In First Out), também conhecida como FILA (o primeiro que entra é o primeiro que sai). O Delphi tem uma classe pra lidar com essa estrutura, se chama TQueue e fica na unit Contnrs.
Nessa estrutura, há dois métodos principais: Push -> para colocar um item no final da fila Pop -> para remover o item que está no início da fila Na implementação em Delphi, os itens são do tipo Pointer. Você pode criar uma classe para encapsular as informações que recebe via socket. Se essa classe herdar de TInterfacedObject você nem precisará se preocupar com a desalocação desses objetos. O problema com a sua solução: Arrays dinâmicos precisam ser realocados na memória cada vez que você aumenta o tamanho dele. Dependendo da quantidade de itens no array e do quanto cada item ocupa em memória, isso pode ser uma operação cara. Independente do tamanho que chega o seu array e do quanto ele ocupa em memória, com certeza a solução usando uma FILA terá um desempenho melhor (além de ser bem mais elegante). Espero ter ajudado. Um abraço, Dirlei Dionísio http://MaisQueBomCodigo.blogspot.com Em Sex, 2010-05-21 às 13:47 +0000, Marcos Abreu Ferreira escreveu: > > Pessoal, > > tenho a seguinte situação: Recebo informações de um sistema via socket > e essas informações teem que ser processadas na ordem que chegam e não > podem ser processadas sem que o processamento da anterior termine. > > Tentei fazer usando o ClientDataSet, onde criei um campo autoincrement > e outro com a informação a ser processada. Como posso receber umas 200 > linhas de informações por segundo, o ClientDataSet se mostrou lento, > pois preciso de uma resposta super rápida no processamento. > > Resolvi então trabalhar com array dinâmico, onde a cada vez que recebo > uma informação, crio um elemento novo no array e salvo a informação > lá. Tenho uma variável global onde controlo qual foi o último array > processado e verificando quantos elementos tem o array, processos os > faltantes. Coloquei um timer varrendo o array de 1 em 1 milisegundo. > > Qual a opinião de vocês quanto a minha solução? Teriam alguma dica > sobre como melhora-la?