No estoy realmente seguro de si el uso de la setHasStableIdbandera solucionará su problema. Según la información que proporcione, su problema de rendimiento podría estar relacionado con un problema de memoria. El rendimiento de su aplicación en términos de interfaz de usuario y memoria está bastante relacionado.
La semana pasada descubrí que mi aplicación estaba perdiendo memoria. Descubrí esto porque después de 20 minutos usando mi aplicación noté que la interfaz de usuario funcionaba muy lento. Cerrar / abrir una actividad o desplazarse por un RecyclerView con un montón de elementos fue realmente lento. Después de monitorear a algunos de mis usuarios en producción usando http://flowup.io/ encontré esto:

El tiempo de fotogramas fue realmente muy alto y los fotogramas por segundo realmente muy bajos. Puede ver que algunos fotogramas necesitan unos 2 segundos para renderizarse: S.
Tratando de averiguar qué estaba causando este mal tiempo de fotograma / fps, descubrí que tenía un problema de memoria como puede ver aquí:

Incluso cuando el consumo medio de memoria estaba cerca de los 15 MB al mismo tiempo, la aplicación estaba perdiendo fotogramas.
Así fue como descubrí el problema de la interfaz de usuario. Tuve una pérdida de memoria en mi aplicación que causó muchos eventos de recolección de basura y eso fue lo que causó el mal rendimiento de la interfaz de usuario porque la máquina virtual de Android tuvo que detener mi aplicación para recopilar memoria en cada fotograma.
Al mirar el código, tuve una fuga dentro de una vista personalizada porque no estaba anulando el registro de un oyente de la instancia de Android Choreographer. Después de lanzar la solución, todo se volvió normal :)
Si su aplicación está perdiendo fotogramas debido a un problema de memoria, debe revisar dos errores comunes:
Revise si su aplicación asigna objetos dentro de un método invocado varias veces por segundo. Incluso si esta asignación se puede realizar en un lugar diferente donde su aplicación se está volviendo lenta. Un ejemplo podría ser la creación de nuevas instancias de un objeto dentro de un método de vista personalizado onDraw en onBindViewHolder en su titular de vista de vista de reciclador. Revise si su aplicación está registrando una instancia en el SDK de Android pero no la está lanzando. El registro de un oyente en un evento de bus también podría ser una posible filtración.
Descargo de responsabilidad: la herramienta que he estado usando para monitorear mi aplicación está en desarrollo. Tengo acceso a esta herramienta porque soy uno de los desarrolladores :) Si quieres acceder a esta herramienta, pronto lanzaremos una versión beta. Puede unirse a nuestro sitio web: http://flowup.io/ .
Si quieres utilizar diferentes herramientas puedes utilizar: traveview, dmtracedump, systrace o el monitor de rendimiento de Andorid integrado en Android Studio. Pero recuerde que estas herramientas monitorearán su dispositivo conectado y no el resto de sus dispositivos de usuario o instalaciones del sistema operativo Android.