Pergunta

Estou adicionando alguns índices à minha DevExpress TdxMemDataset para melhorar o desempenho. O TdxMemIndex tem sortOptions que incluem a opção para soCaseInsensitive . Meus dados é geralmente uma string GUID, por isso não é sensível a maiúsculas. Eu estou querendo saber se eu estou melhor fora apenas forçando todos os dados para o mesmo caso ou se o soCaseInsensitive bandeira e usando o loCaseInsensitive marque com a chamada para localizar tem apenas um menor penalidade de desempenho (aproximadamente igual ao converter o caso da minha corda cada vez que eu preciso para usar o índice).

Neste momento eu estou deixando o CaseInsentive fora e apenas converter caso.

Foi útil?

Solução

IMHO, o melhor é garantir a qualidade dos dados na Post tempo. Raciocínios:

  1. Você (geralmente) conhecer a natureza dos dados. Assim, por exemplo. você pode usar maiúsculas (sabendo que GUIDs estão todos na faixa ASCII) em vez de muito AnsiUpperCase mais lento que um componente geral, como TdxMemDataSet é forçado a usar.

  2. Você inserir os dados apenas uma vez. Searching / Sorting / Filtering que tudo implica o motor upercassing interna de TdxMemDataSet é uma ação repetida. Além disso, existem outras ações encadeadas que irá acionar este motor whithout perceber. (Por exemplo, um TcxGrid que é classificada por padrão ter GridMode:. = True (presumo que você use o DevEx componentes) e tendo uma classe agir como um corretor de passar a mensagem de classificação para o conjunto de dados subjacente

  3. Normalmente, a entrada de dados é feito em etapas, um ou poucos registros em um lote. A única exceção notável é aplicações de aquisição de dados. Mas em ambos os casos acima cultura usabilidade do usuário permite que maneira tempos de resposta maiores para você brincar. (IOW o quanto gostaria de acrescentar uma chamada de maiúsculas para um posto recorde que dura 0.005 ms?) OTOH, os usuários são muito exigente com a velocidade de dados operações retreival (pesquisa, classificação, filtragem etc.). Mantenha o retreival dados tão rápido quanto você puder.

  4. Tendo os dados no banco de dados pronto para expor reduz o risco de processamento de erros quando você vai escrever ( se você vai escrever) outros módulos (você precisa se lembrar de AnsiUpperCase o dados em qualquer módulo em qualquer idioma que você vai escrever). Também aqui um exemplo clássico é quando você vai usar outras ferramentas externas para acessar os dados (por ex. Gerentes de banco de dados para executar uma SELCT SQL sobre os dados).

hth.

Outras dicas

Talvez os fóruns DevExpress (ou alguma vez um e-mail de apoio, se você tiver acesso a ele) seria um lugar melhor para procurar uma resposta oficial sobre essa pergunta desempenho.

De qualquer forma, é melhor para garantir que os dados estão no formato desejado - pelas razões plainth já foi explicado - o momento de salvá-lo. Então, nesse específico, certifique-se o GUID está escrito na parte superior (ou inferior, é uma questão de gosto) caso. Se for SQL Server ou outro servidor de banco de dados que têm um tipo de dados GUID, certifique-se o SELECT fazer o trabalho -. Se aplicável e possível , mesmo o tipo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top