Participando de um projeto de Windows Phone surgiu a necessidade de testar a performance do aparelho, e da plataforma em si. Este teste tinha como base a pergunta: "O quão rápido é o aparelho ao carregar uma quantidade X de elementos em um listbox?"
Essa dúvida surgiu devido a característica do aplicativo de armazenar registros diariamente, e na qual o usuário poderia listar uma quantidade bastante grande de registros na interface visual. Diante deste cenário muitas dúvidas surgiram: "Quanto tempo leva para carregar o controle?", "Qual a quantidade ideal de registros a serem carregados?", "Como o silverlight vai se comportar ao carregar uma quantidade grande de itens?", "O layout esta complexo o suficiente para fazer o aplicativo ficar lento?" "Quanto esses dados em memória podem deixar o device lento?"
Essas dúvidas poderiam apenas ser respondidas com um experimento, e este trabalhou coube a mim. Diante disso construí um teste de carga bastante simples, cujo funcionamento era: Criar muitos registros na base do SQL CE e listar uma quantidade bastante grande de registros de uma única vez.
Então, criei três funções básicas no aplicativo, sendo elas:
1 – Geração de valores: esta funcionalidade inseria 1000 registros no SQL CE toda vez que fosse acionada, populando a base com uma quantidade grande (comparada ao porte do dispositivo) de registros. A estrutura da classe que produziu esses dados na base de dados é a da imagem abaixo:
[Table(Name="tbLoadTest")] public class TargetItem { [Column(Name="ldtId", IsPrimaryKey=true, IsDbGenerated=true, CanBeNull=false,AutoSync=AutoSync.OnInsert)] public int Id { get; set; } [Column(Name="ldtTitle", CanBeNull=false)] public string Title { get; set; } [Column(Name = "ldtDescription", CanBeNull = false)] public string Description { get; set; } [Column(Name = "ldtValue", CanBeNull = false)] public decimal Value { get; set; } [Column(Name = "ldtInsertDate", CanBeNull = false)] public DateTime InsertDate { get; set; } }
2 – Apagar itens do banco de dados: para limpar o banco de dados (e não deixar meu celular poluído) foi criada uma funcionalidade de expurgo dos dados.
3 – Listagem de arquivos: essa é a motivação de nosso teste de carga. Saber o quão rápido um determinado layout poderia ser carregado na tela do device e qual a quantidade ideal de registros que podem ser carregados sem interferir na performance do aparelho.
O interface do teste de carga ficou assim:
RESULTADOS
Os resultados foram bastante interessantes. A carga de mil itens foi bastante rápida, em menos de 1,5 segundos foi possível incluir mil registros de uma única vez no SQL Ce. A carga de itens no listbox foi mais surpreendente ainda, em 1 segundo foram carregados mil itens na tela, em 2 segundos foram carregados mil registros e em 3,5 segundos foram carregados cinco mil registros na tela. O único ponto que a performance não agradou foi a parte de exclusão de registros, pois ela demorou muito para excluir todos os registros (demorou 1m35s para excluir 5000 registros), possivelmente isso esteja atrelado ao funcionamento do SQL CE e de seu transaction log.
Mas em suma, a performance do Windows Phone esta acima do esperado e seus resultados foram bastante satisfatórios.
APARELHO UTILIZADO
Samsung I8700 Omnia 7
OS: Microsoft Windows Phone 7.5
Chipset: Qualcomm QSD8250 Snapdragon
CPU: 1 GHz Scorpion
GPU: Adreno 200
Referência: http://www.gsmarena.com/samsung_i8700_omnia_7-3537.php