He creado un control de WPF (que hereda de FrameworkElement) que muestra un gráfico de baldosas que pueden ser criticada. Cada mosaico es de 256x256 píxeles a 24 ppp. He anulado OnRender. Allí, cargué cualquier nuevo mosaico (como BitmapFrame), luego dibujé todos los mosaicos visibles usando drawingContext.DrawImage.WPF render rendimiento con BitmapSource
Ahora, cada vez hay más de un puñado de nuevas tejas por rendir ciclo, la tasa de fotogramas de 60 fps cae a cero durante un segundo. Esto no es causado por la carga de las imágenes (que toma en el orden de milisegundos), ni por DrawImage (que no requiere tiempo, ya que simplemente llena una estructura de datos de renderización intermedia).
Mi conjetura es que el hilo se hacen en sí ahoga cada vez que se pone un gran número (~ 20) de los nuevos casos BitmapSource (es decir, los que ya no se había almacenado en caché). O pasa mucho tiempo convirtiéndolos a algún formato interno compatible con DirectX o puede ser un problema de almacenamiento en caché. No puede quedarse sin RAM de video; Perforator muestra picos por debajo de 60 MB, tengo 256 MB. Además, Perforator dice que todos los objetivos de render son acelerados por hardware, por lo que tampoco puede serlo.
Cualquier ideas serán bienvenidos!
Gracias de antemano
Daniel
@RandomEngy:
BitmapScalingMode.LowQuality reducido el problema un poco, pero no deshacerse de él. Ya estoy cargando mosaicos con la resolución deseada. Y no puede ser el controlador de gráficos, que está actualizado (Nvidia).
Estoy un poco sorprendido de saber que el escalado lleva tanto tiempo. De la forma en que lo entendí, un mapa de bits (independientemente de su tamaño) solo se carga como una textura Direct3D y luego se escala en hardware. De hecho, una vez que el mapa de bits se ha renderizado por primera vez, puedo cambiar su rotación y escala sin ningún otro congelamiento.