Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

170
Visualizações
¿Está bien usar Dictionary en lugar de ConcurrentDictionary en un programa de subprocesos múltiples cuando el número de claves es fijo?

Sé que en el programa de subprocesos múltiples, necesitamos usar ConcurrentDictionary , ConcurrentBag , etc., esa colección segura para subprocesos. Pero en mi situación, la cantidad de claves en el Diccionario es fija, tengo 5 claves exactas que ya conozco antes de que se ejecute el programa para poder inicializar la clave del diccionario. Entonces, mi pensamiento es que, debido a que el número de claves no va a cambiar, puedo usar Dictionary en lugar de ConcurrentDictionary , y la razón por la que estoy pensando en hacer esto es porque la colección no cambiará de tamaño internamente, por lo que no habrá Puede ser una situación en la que thread1 intente actualizar un elemento después de que thread2 agregue un nuevo elemento y luego provoque un cambio de tamaño, lo que hace que la actualización de thread1 falle. ¿Es correcto mi entendimiento?

Más información:

No tengo un par clave/valor compartido que todos los subprocesos puedan actualizar, cada subproceso solo actualiza un par clave/valor en particular y TKey es una cadena única, TValue es un tipo de clase simple

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

La documentación de la clase Dictionary<TKey, TValue> establece explícitamente que:

Para permitir que varios subprocesos accedan a la colección para leer y escribir, debe implementar su propia sincronización.

Entonces, según la documentación, si modifica el diccionario por varios subprocesos sin sincronización, ha ingresado al territorio de "comportamiento indefinido". Lo que significa que "cualquier cosa" puede pasar, y pase lo que pase no será un error. Se ha incumplido la garantía, y Microsoft no podría preocuparse menos por los daños que le hayan ocurrido después de usar sus productos incorrectamente.

Dicho esto, y sabiendo cómo se implementa la clase Dictionary<TKey, TValue> , es poco probable que tenga problemas al usar Dictionary<TKey, TValue> sin bloqueo, si sigue el patrón de uso muy estricto que describe en su pregunta. Depende de usted decidir si está bien confiar en los detalles de implementación de la API que usa, en lugar de la documentación publicada.

Como nota al margen, tenga en cuenta que, en general, la búsqueda en serie de un valor en una pequeña List<T> o matriz supera la búsqueda de un valor en un pequeño Dictionary<TKey, TValue> basado en hash. El punto de inflexión depende del tipo de clave y puede ser tan grande como 50 elementos o más. También para almacenar un valor por subproceso, puede encontrar útil la clase ThreadLocal<T> .

over 4 years ago · Santiago Trujillo Relatório

0

Resumen

  1. Funcionará.
  2. Confiar en la implementación actual se considera una mala práctica. Evitalo si puedes.
  3. La optimización temprana se considera una mala práctica. Use la opción más segura y reevalúe solo si se confirma que es demasiado lento.
  4. Un diccionario compartido parece una opción interesante aquí: no parece agregar ninguna funcionalidad a su solución. Una solución diferente (por ejemplo, 5 variables) funcionaría mejor aquí.

Realmente lo quiero. ¿Puedo? Sí, pero.

Si

  1. las teclas del diccionario nunca cambian y
  2. solo un hilo accede al valor de una clave dada

entonces no es necesario bloquear la implementación actual (es decir, el Dictionary está bien) porque el diccionario en sí no cambia y un solo consumidor accede a cada valor.

¿Está bien? Realmente no

Generalmente, no está bien usar código que funciona pero usa estructuras que tienen mejores alternativas para un escenario dado. Un código como este es muy fácil de descifrar sin saberlo hasta que se implementa en un escenario de la vida real e incluso entonces es difícil descubrir el problema rápidamente.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda