CLR: .Net / Mono / Boo / Otros CLR > C#
Performance
JuanK:
<_< no tomare eso como una opcion :lol: de no poder al final hacer nada preferiria dejar lo así. :(
Ademas en todo caso deberia extraer la informacion del bmp y copiarla en un arreglo propio de objetos tipo T /* color*/ y ya sin padding.
pabloreda:
a ver si entiendo...
en bmparr esta la imagen que convertiste del archivo que cargaste..
* generalmente conviene tomar los colores como 32bits y listo , no importa si desperdicias porque usas 24 bits, si este arreglo esta alineado mejor.
conviene evitar los metodos virtuales, ya que estas decidiendo EN TIEMPO DE EJECUCION lo que podrias decidir antes, si no te queda otra inclusive te combiene hacer una funcion para cada tipo deconversion 16->32 24->32 32->32 y elegirla ANTES de entrar en cualquier bucle..
* ya que sabes que vas a usar memoria para guardar esta imagen porque no la haces global ( y sin new o delete), simplemente como estatica...
* evitar el uso de indices, quizas el pinche compilador lo optimize pero siempre es mejor controlar esto... UTILIZAR puntero !!!!
El puntero es el metodo mas veloz y directo para recorrer memoria
* evitar los contadores si tenes un puntero !!! y ya que esta indicarle al puntero que sea un registro !!!
--- Código: Text --- int bmpcargado[IMAGENMASGRANDE];int bmpconvertido[LOMISMO]; void convertir(void){register int *pimg=bmpcargado;register int *pdes=bmpconvertido;int *pultimo=bmpcargado+tamanio;for (;pimg<pultimo;pimg++,pdes++) *pdes=((*pimg&0xff0000)>>16)|(*pimg&0xff00)|(*pimg&0xff)<<16); } quizas tiene algun error, yo ya no programo en C ;) pero bueno...
una duda... C# todabia tiene puntero ??? espero que si
espero te ayude...
Eternal Idol:
En vez de usar memoria estatica que es una practica de programacion pesima podrias tratar de reservar directamente toda la memoria necesaria para ese bitmap y no linea por linea.
Using the register keyword in strategic places C will improve performance substantially.
This keyword is a complete placebo in most modern C compilers.
Realmente hay una altisima probabilidad de que esto sea una perdida de tiempo absoluta. No tiene sentido intentar hacer esto con C# ya que no es la herramienta adecuada, si lo es para que el programa llegue a buen puerto y sea completado en el menor tiempo posible, con la mayor simplicidad y con gran posibilidad de reutilizar el codigo generado y que este sea generado en gran parte de la misma forma pero estas ventajas (entre otras mas) se vuelven desventajas a la hora de optimizar ya que se pierde el control del codigo generado.
JuanK:
--- Cita de: "pabloreda" --- quizas tiene algun error, yo ya no programo en C ;) pero bueno...
una duda... C# todabia tiene puntero ??? espero que si
espero te ayude...
--- Fin de la cita ---
Si, C# tiene punteros..
sin embargo tu alternativa presenta un alto impacto en el codigo fuente dependiente de ese modulo...
vere si puedo hacer algo hibrido o que se yo.
--- Citar ---Realmente hay una altisima probabilidad de que esto sea una perdida de tiempo absoluta. No tiene sentido intentar hacer esto con C# ya que no es la herramienta adecuada, si lo es para que el programa llegue a buen puerto y sea completado en el menor tiempo posible, con la mayor simplicidad y con gran posibilidad de reutilizar el codigo generado y que este sea generado en gran parte de la misma forma pero estas ventajas (entre otras mas) se vuelven desventajas a la hora de optimizar ya que se pierde el control del codigo generado.
--- Fin de la cita ---
Claro tienees mucha razon, para cosas de mision critica nda como C++/C y asm :rolleyes:
pero en todo caso no me dare por vencido.
espero poder hacer algo.
luego les cuento.
JuanK:
Bueno, tengo algunos ajustes en mente para hacer...
pero mientras, y antes de empezar en forma ( estaba de viaje) quisiera saber algo.
que tan importante es el consumo de memoria a la hora de medir el performance en millones de ciclos?
Si tengo una clase X con campos y metodos que tan mas eficiente seria dejar todos sus metodos esticos versus versiones diferentes de los mismos metodos pero no estaticos?
Es decir reservar 2'500.000 porciones de memoria de tamaño N/x es más rápido que reservar 2'500.000 porciones de memoria de tamaño N? :rolleyes:
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa