Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Un lienzo es un objeto al que se vincula una matriz de píxeles. El recurso es responsable de vincular esta matriz de píxeles (véase bool CCanvas::Create())
Es una mala práctica borrar y volver a crear un lienzo todo el tiempo.
Es una buena práctica crear un lienzo cuando se necesita y borrarlo cuando ya no se necesita, por ejemplo, al final del programa.
Una vez creado un objeto lienzo, puedes limpiarlo, sobrescribir la matriz de píxeles en cada fotograma, cambiar el tamaño del lienzo y moverlo a donde quieras.
Gracias, me ha quedado un poco más claro, pero no todo. ¿Entiendo correctamente que si después de crear un objeto canvas, simplemente borro el objeto del gráfico usando ObjectDelete(), entonces el array de pixels ligado a este objeto permanece intacto y... Cuando vuelvo a crear un nuevo objeto canvas con un nombre diferente, se crea una nueva matriz de píxeles en la memoria y, por tanto, teóricamente, ¿es posible llenar toda la memoria?
¿O la antigua matriz de píxeles es simplemente re-ligada al último objeto-lienzo creado cada vez (porque es y sólo con él que todas las funciones de la instancia usada de la clase-lienzo empiezan a trabajar)?
Gracias, me ha quedado un poco más claro, pero no del todo. ¿Entiendo correctamente que si después de crear un objeto canvas, simplemente borro el objeto del gráfico usando ObjectDelete(), entonces el array de píxeles ligado a este objeto permanece intacto y.... Cuando vuelvo a crear un nuevo objeto canvas con un nombre diferente, se crea una nueva matriz de píxeles en memoria, y por lo tanto, teóricamente, es posible llenar toda la memoria?
Por supuesto, los recursos sin propietario se multiplicarán.
O todavía la vieja matriz de píxeles es simplemente re-ligada al último objeto kanvas creado cada vez (porque es y sólo con él que todas las funciones de la instancia utilizada de la clase kanvas comienzan a trabajar)
Tu imaginación es magnífica. Te envidio. A mi no se me hubiera ocurrido tal cosa. :))
Sin embargo, si guardas el nombre de un recurso sin propietario, puedes volver a vincularlo a un nuevo objeto bitmap. Pero esto es del campo de la esquizofrenia.
Sin embargo, si guardas el nombre de un recurso sin propietario, puedes volver a vincularlo a un nuevo objeto de mapa de bits. Pero esto es del campo de la esquizofrenia.
Retiro lo dicho. Creo que he encontrado un caso en el que esto podría ser útil.
Gracias, sólo quería entender qué pasa en memoria si usas ObjectDelete () en lugar de Destroy (). Y me he dado cuenta de que en ese caso los recursos gráficos (arrays de píxeles sin propietario y demás) se multiplicarán si cada vez se genera un nuevo nombre para un nuevo objeto canvas.
¿Y si utilizo ObjectDelete(), pero luego creo un objeto canvas con el mismo nombre, la matriz de píxeles será vieja o seguirá siendo nueva?
p.d. las preguntas son probablemente estúpidas, pero lo necesito para entender el mecanismo del canvas
.
Gracias, sólo quería entender qué pasa en memoria si se usa ObjectDelete () en lugar de Destroy (). Y me di cuenta de que los recursos gráficos (matrices de píxeles sin propietario y algo más) se multiplicarán si se genera un nuevo nombre para un nuevo objeto canvas cada vez.
Es fácil de comprobar escribiendo un simple script.
¿Puede decirme cómo?
¿Puede decirme cómo?
así:
y mira el comentario:
!!! después de ejecutar este script, no olvides recargar el terminal para liberar memoria para recursos huérfanos.
así:
y mira el comentario:
!!! después de ejecutar este script, no olvides recargar el terminal para liberar memoria para recursos huérfanos.
¡Muchas gracias por tu ayuda! No he trabajado antes con la memoria de esta manera, lo probaré.
¡Gracias por la pista de que los recursos huérfanos se borran al recargar el terminal! Muchas cosas así no son obvias para mí todavía.
p.d. ¡todo en este ejemplo es perfecto! Hay algo que mirar, algo que pensar y una oportunidad para experimentar... El código es corto.
No hace falta que lo hagas. En el destructor del Canvas se ejecuta automáticamente:
~iCanvas() { Destroy(); ChartRedraw();};