Otro buen beneficio de las estructuras inmutables es que puede almacenar instancias de ellas en caché localmente y reutilizarlas en varios subprocesos sin temor a comportamientos inesperados, como sería el caso si fueran mutables.
Por ejemplo, supongamos que está utilizando un servicio de caché externo como memcached o Velocity o algún otro servicio de tablas distribuidas igualmente simplista. Podrías usar la biblioteca cliente de C# y llamarla suficientemente buena. Sin embargo, eso es un desperdicio de recursos dado un contexto efímero como un escenario de solicitud web.Lo que realmente desea es extraer cada objeto del caché una vez y solo una vez en su contexto.
La forma más segura de realizar este trabajo es colocar una tabla hash local en su proceso frente al proveedor de la memoria caché. En la primera solicitud de la clave de caché, debe desplegar la secuencia de bytes serializados que representa el objeto que desea usar y almacenar esa secuencia de bytes en su tabla hash local. En solicitudes posteriores para la misma clave de caché, simplemente busque la secuencia de bytes en la tabla hash local y deserialice el objeto a una nueva instancia para cada solicitud. Esto es para evitar múltiples viajes redundantes al nodo del servidor de caché para la misma información que supuestamente no ha cambiado durante la vida útil de su contexto.
Con estructuras inmutables, puede deserializar la secuencia de bytes solo una vez en la primera solicitud y salirse con la tarea de almacenar la instancia deserializada en la tabla hash en lugar de la secuencia de bytes y simplemente compartir esa única instancia inmutable de su objeto. Obviamente, esto reduce las penalizaciones de deserialización que pueden sumarse rápidamente si el código de consumo está escrito de tal manera que no importa cuántas llamadas haga al proveedor de almacenamiento en caché, suponiendo que el caché es más rápido que consultar el almacén de datos subyacente.
Quizás esta sea una respuesta más subjetiva, pero es un problema específico que se puede resolver de manera única mediante el uso de estructuras inmutables, así que pensé que era relevante compartir.
Lamentablemente, la respuesta a esta pregunta es "depende". ¿De qué depende? Una gran cantidad de factores, la mayoría de los cuales son locales para su proyecto y no de naturaleza general. –
El contexto es la clave. –