Hoy me ha pasado una cosa “curiosa”. Estaba resolviendo una incidencia en el proyecto en el que participo que me traía un poco desconcertado ya que es una funcionalidad que siempre había funcionado.Al final resulta que que el sistema petaba porque una hashtable que se rellenaba con objetos y cuya “key” se obtenía mediante el método getHashCode(), estaba dando problemas de colisiones. La tabla cuyos registros se mapeaban en objetos tenía unas 19000 entradas y gethashcode() en c# devuelve un entero de 32 bit por lo que estadísticamente era probable que se produjeran colisiones al generar la key.
Otro asunto que dejo para otro día es porque cargamos una estructura con 19000 objetos en memoria en lugar de usar “lazy load”…
1 respuesta hasta el momento ↓
rpcgen // 30 Sep 2008 a 5:45 pm |
19000 es un numero seguro dentro del rango de 4000 millones de posibilidades que ofrece un entero de 32 bits.
No obstante todo es posible y se debería tirar de la orejas a los desarrolladores que implementaron el sistema inicial sin sobrecargar correctamente los métodos getHashCode e Equals. Este segundo debe asegurar que elementos que generan un código de dispersión identico no se excluyan mutuamente de los contenedores que utilizan el código hash para almacenar y localizar sus elementos.