tag returns propiedad name c# algorithm data-structures windows-phone-7 indexing

returns - propiedad tag c#



Cómo gestionar un gran conjunto de datos en un dispositivo móvil (2)

Actualmente estoy implementando un diccionario japonés y me gustaría tener algunas ideas sobre cómo encontrar entradas de manera rápida y eficiente. Las propias entradas del diccionario se cargan y almacenan en una clase que alberga las palabras en japonés (potencialmente con ortografía múltiple), sus pronunciaciones fonéticas y definiciones en inglés como tres listas.

Originalmente tenía una estructura de árbol con cada nodo representando un carácter en una palabra. Fue muy rápido pero desafortunadamente usé mucha memoria. La definición de los datos en sí es de unos 35 meg, y la estructura del árbol en sí es de unos 130 meg. Además, también solo se permite mirar desde japonés -> inglés. La memoria es una preocupación ya que, aparte de la necesidad de índices adicionales, se pretende que exista una versión de Windows Phone 7 de la aplicación. El diccionario contiene 150,000 entradas.

Para resumir, esto es lo que debo hacer: Almacenar una lista de definiciones Tenga tres índices en esta lista para los significados japonés, fonético e inglés. Haga que las búsquedas sean rápidas (lo ideal es menos de 1 segundo) Use la menor cantidad de memoria posible (el límite de uso de la memoria en Windows Phone 7 es de 90 meg)

¿Algunas ideas?


Debería considerar el uso de una base de datos móvil o servicio web para tratar esa cantidad de datos en un dispositivo móvil. El tipo de rendimiento, las funciones y la administración que busca son muy difíciles de obtener en cualquier plataforma, pero no tiene que hacerlo. Utilice una base de datos con índices y tablas adecuados, locales o remotos.

SQL CE no está disponible para WP7 pero hay otras opciones , comercial y de código abierto. Además, si espera estar conectado con frecuencia y está bien con un poco de latencia, considere usar un servicio web. Puede utilizar cualquier base de datos de su elección en un servidor central que se le presente a través del servicio web. Su cuello de botella serían las comunicaciones, pero descargaría una cantidad significativa de procesamiento de un dispositivo restringido.


  • La solución más sencilla es: el lado del cliente solo acepta la entrada, luego envía una solicitud al lado del servidor , y el lado del servidor devuelve la salida al lado del cliente .
  • Otra forma es hacer la aplicación fuera de línea:
    1. La lista de palabras japonesas debe ordenarse en orden lexicográfico , al igual que las otras dos listas.
    2. Como los japoneses tienen 50 letras, la lista se puede dividir en 50 * 50 partes de acuerdo con las dos primeras letras de una palabra. Entonces, el punto clave es que: prepare una matriz de 50 * 50, registrando los desplazamientos correspondientes a la posición inicial de las dos primeras letras del archivo. Si usa un entero de 32 bits para almacenar compensaciones , costará 10 KB.
    3. Para cada palabra japonesa, almacene las compensaciones en las otras dos listas. Por conveniencia, las dos listas se pueden combinar juntas. Si usa un entero de 32 bits para almacenar compensaciones , y tiene 150000 entradas, aumentará el tamaño de los datos en 600 KB.
    4. Mantenga la matriz de compensaciones en la memoria, cuando ingrese una palabra en japonés, primero encuentre el desplazamiento de acuerdo con las dos primeras letras, luego lea todas las palabras en japonés que comienzan con las dos primeras letras. Porque tiene 150000 entradas, así que en promedio el número de palabras que comienzan con las mismas dos letras es 60. Y una página de memoria es de 4 KB, suficiente para 60 palabras, por lo que solo se necesita 1 IO . Después de encontrar las compensaciones en las otras dos listas, lea el contenido correspondiente. Por lo tanto, solo se necesita 2 IO en una operación de búsqueda. Y el costo de cálculo también es pequeño, el costo de la memoria también es muy bajo.