Pergunta

Eu sou novo para SubSonic e Linq coisas e eu estou tentando uma figura fora do caminho mais curto e ideal de recuperar um único registro.

O outro caminho é mais rápido e exige menos código para escrever do que isso para obter um único registro?

User user2 = DB.Select().From(User.Schema)
.Where(User.PasswordColumn).IsEqualTo(password)
.And(User.SINumberColumn).IsEqualTo(siNumber)
.ExecuteSingle<User>();

Eu tenho usado a ferramenta AntsProfiler para verificar, e isso leva avg de 29.12ms tempo de CPU - testado ao longo de dez corridas

Onde como este leva ainda mais tempo

UserController uc = new UserController();
Query query = new Query("User");
query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);   
User user = uc.FetchByQuery(query).First<User>();

Apenas a última linha take 256.08ms tempo de CPU mais UserController leva 66.86ms.

Todas as sugestões?

Foi útil?

Solução

IIRC, o objeto de consulta é fluente .. i.

query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);

deve ler-se:

query = query.WHERE(User.Columns.Password, password);
query = query.WHERE(User.Columns.SINumber, siNumber);

O aumento do tempo nos seus testes podem ser contabilizados devido a este (que você está pedindo para todos os itens do usuário e, em seguida, pegar o primeiro).

Outras dicas

O "gargalo" seria a consulta gerada execução, não SubSonic gerá-la ou devolver o resultado. Se uma consulta particular é lento, você deve olhar para usar funções de indexação de seu provedor de banco de dados para otimizá-lo.

No segundo caso, eu estou supondo que o tempo de execução adicional é sobrecarga para LINQ para retornar o primeiro item da coleção.

Assim, a minha resposta seria, a primeira maneira é a melhor maneira de fazê-lo, e se 29ms não é aceitável (que para uma chamada para um DB, eu não acho que é razoável), adicionar alguns índices em sua DB para acelerar a recuperação.

Eu acho que John está certo sobre o dinheiro. Se você realmente quiser testar SubSonic para ver quanto tempo leva você precisa testar quanto tempo leva subsônico para criar a instrução SQL não quanto tempo leva SubSonic para criar a instrução SQL e quanto tempo leva para o seu banco de dados para retornar os resultados ao mesmo tempo (Você precisa isolar seus testes).

Talvez você deve testar quanto tempo leva para obter os resultados com uma SQLCommand velho regular e passá-lo a sua conexão e os parâmetros e ver quanto tempo que leva para que você tenha uma comparação.

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