Ao reler esta minha posta de ontem, lembrei-me das embedded resources, que costumam ser usadas para a localização de aplicações, mas que nada impede que sejam usadas para transportar o que quer que seja. Embeber um ficheiro de texto seria trivial, e as vantagens seriam potencialmente animadoras – ao arrancar a aplicação, a framework carrega muito mais depressa as resources junto com o executável do que o StreamReader consegue ler um ficheiro externo.

Embeber um ficheiro no Visual Studio é do mais simples que há: no menu de contexto do projecto, escolher a opção Properties, depois a aba Resources. Se não existirem resources, clicar no link que estará bem visível no meio da página, e escolher Add New Text File do dropdown Add Resource.

Visual Studio 2008 - Resources

Para se aceder à resource é ainda mais simples:

string linhas = TrieTest.Properties.Resources.palavras;

TrieTest é o nome do meu namespace; palavras é o nome da minha resource (ao inserir o ficheiro de texto como resource, o Visual Studio “adivinha” o nome da mesma a partir do nome do ficheiro, mas pode ser modificado). O resto é bastante simples e intuitivo. Tenham apenas em conta que, neste caso, estamos a carregar directamente para string porque é um ficheiro de texto; imagens, sons, teriam de ser carregados para o tipo correspondente.

O código usando esta nova metodologia fica então assim:

// como este é o nodo principal da árvore
// não tem uma inicialização explícita.
Trie myTrie = new Trie();

// as struct tem um comportamento nem sempre muito intuitívo
// ao fazer inicializações sem parâmetros
// por via das dúvidas, vamos inicializar as variáveis aqui
myTrie.filhas = new Dictionary<char, Trie>();
myTrie.final = false;

// ler a resource
string[] linhas = TrieTest.Properties.Resources.palavras.Split(‘\n’);
for(int i = 0; i < linhas.Length; i++)
    myTrie.Inserir(linhas[i].ToLower());

Poupam-se duas linhas, a abertura e fecho da stream do ficheiro. E, muito mais importante, o tempo de criação da trie é reduzido quase a metade: onde ontem demorava à volta dos 8 segundos, chegando aos 9 e até 10 nalguns testes (lá teria os cores ocupados com outra treta qualquer), hoje passou para 4,5 segundos, nunca chegando aos 5 segundos. Isto é basicamente o tempo de se olhar para um splashscreen enquanto carrega em background…

Projecto

Outros Projectos » Trie

Da mesma série:

Trie - Uma estrutura de alta performance de pesquisa

Trie contra-ataca – uso de wildcards em pesquisas, correcções e limpeza

Partilhar no Sapo Links Partilhar no del.icio.us Partilhar no Digg Partilhar no Twitter Partilhar no StumbleUpon Partilhar no MySpace Partilhar no Facebook

Comentários Deixar um comentário

 Categorias
 Arquivo
 Projectos em Destaque
 Últimas Postas no Blog
 Últimos Comentários do Blog