Estoy escribiendo un servicio donde el rendimiento es esencial, y no estoy seguro de cuál es el más rápido de la cosa. Tengo un par de Objetos (50-200), que cada uno tiene un IDENTIFICADOR de ellos (enteros, por ejemplo, 84397 o 23845). Sería más rápido para tener un Diccionario, una Lista de KeyValue Parejas o una Lista con los índices establecidos para el Id con el resto de tener valores null o una matriz con la misma idea?

  • ¿Has probado a ejecutar una simple aplicación de la prueba?
  • He empezado, pero pensé pidiendo que sería más eficiente (para futuras askers y a mí).
  • Que las operaciones que tiene que hacer con esos objetos? Búsqueda por clave? Búsqueda de valores? Muchas inserciones? Extracción de llaves?
  • En el caso de que usted está utilizando matrices – ¿cuál es el máximo ID? Cómo se presenta especialmente se puede aumentar el tamaño de un array?
  • Leer el valor de clave (de forma aleatoria), la actualización de valor de clave (cada segundo), un par de inserciones (cada pocos segundos). Máxima ID no es fijo.
  • Más rápido wrt para qué? Más rápido de búsqueda? Eliminación? La suma? Updation? De inserción? La enumeración? Menor sobrecarga de la memoria, de manera que otros programas se ejecutan más suave? Más rápido para escribir? Lo siento votación para cerrar.

InformationsquelleAutor SBoss | 2011-11-29

4 Comentarios

  1. 19

    Depende del tipo de operación que se desea ejecutar. Vamos a suponer que usted desea encontrar un objeto con un determinado ID.

    • La gran variedad enfoque es más rápido: el Acceso a myArray[84397] es una constante de tiempo de operación O(1). Por supuesto, este enfoque requiere más memoria.
    • La diccionario es casi tan rápido pero requiere menos memoria, ya que utiliza un tabla hash internamente.
    • La lista de pares enfoque es el más lento, ya que usted podría tener que recorrer toda la lista para encontrar la entrada, que los rendimientos O(n) complejidad.

    Por lo tanto, en su situación, yo elegiría el diccionario, a menos que el marginalmente mejor rendimiento de la enorme variedad que es realmente relevante en su caso.

    • Gracias por la ayuda, voy a utilizar el diccionario (suponiendo marginalmente significa algo así como 1ms más rápido).
    • Usted escribió «el diccionario requiere menos memoria» – no te refieres a escribir se requiere MÁS memoria, ya que se utiliza una tabla hash internamente?
    • Se requiere menos memoria que con la opción anterior, la enorme variedad. La enorme matriz requiere de maximumID lugares de almacenamiento, mientras que el diccionario sólo requiere alrededor de someConstantnumberOfElements* lugares de almacenamiento.
  2. 8

    Dictionary<TKey, TValue> utiliza una tabla hash internamente así que creo que sería la más rápida.

    • +1 Esta es precisamente la razón por la Dictionary existe.
    • Sería un HashTable sí mismo, ser mejor?
    • El diccionario genérico no utiliza un HashTable internamente, así que no hay. Un HashTable es considerablemente más lento cuando se utiliza ValueTypes, como usted planea hacer con su int.
    • Un Dictionary<K,V> utiliza una tabla hash, pero no utiliza el HashTable clase.
    • Sí. Ahora me doy cuenta de que no estaba claro. Gracias por la aclaración.
    • El rendimiento de ambos HashTable y Diccionario sería muy similares, pero hay una diferencia importante ` Diccionario es un tipo genérico, Hashtable no lo es. Eso significa que usted obtiene el tipo de seguridad con el Diccionario, porque no se puede insertar cualquier objeto random en él, y usted no tiene que convertir los valores que llevan a cabo.`
    • usted no sólo puede cambiar completamente de alguien del post. Hacer su propia respuesta, si usted tiene uno.

  3. -1

    Puede utilizar tablas de hash así. Diccionario internamente utilizando todos modos.
    pero el diccionario tiene una ventaja que es un tipo GENÉRICO que se le da a usted la seguridad de tipos.

    aquí es diferente hilo
    Diccionario Vs HashTable
    Espero que te ayuda a decidir.

    Praveen

Dejar respuesta

Please enter your comment!
Please enter your name here