erkosone wrote:Hola Amaka, así leyendo el tema de performance he recordado una conversación que tuve con Codemaster "El tipo que creó Jdiv y Cdiv" donde me comentaba que el para aumentar rendimiento lo que hacia es crear un thread por cada objeto PROCESS y que subian los FPS mucho.
Te lo comento por que en su día esto dió una subida importante al numero de procesos que se podían ejecutar en Android con Jdiv.
Yo en cuanto estudie los threads los implementaré en mi engine, llevo ya unos meses haciendo un Div para Processing y también he tenido que ir a morir al array de objetos, pero eso es un cuello de botella muy grande, la función que devuelve la instancia del objeto n de un array es super lenta tio, y si es así en java no quiero pensar en javascript.![]()
No se si me explico vamos, yo lo hago tmb como indicas:
Collections.sort(draws, new drawComparator()); // recorrer el array de draws y procesar su rendering.. for (int i = draws.size ()-1; i >= 0; i--) { tempDraw = draws.get(i); tempDraw.render(); if (tempDraw.delete()) { //Items can be deleted with remove(). draws.remove(i); } } //###################################################################### Collections.sort(sprites, new spriteComparator()); // recorrer el array de sprites y procesar su rendering.. for (int i = sprites.size ()-1; i >= 0; i--) { tempSprite = sprites.get(i); tempSprite.render(); if (tempSprite.delete()) { //Items can be deleted with remove(). sprites.remove(i); } } //###################################################################### Collections.sort(writes, new writeComparator()); // recorrer el array de textos y procesar su rendering.. for (int i = writes.size ()-1; i >= 0; i--) { tempWrite = writes.get(i); tempWrite.render(); if (tempWrite.delete()) { //Items can be deleted with remove(). writes.remove(i); } }
Lo malo es que encima yo uso 3 listas de objetos, una para los writes, otra para los draws, y otra para los sprites... es super super lento..
Si quieres podemos comentar como hace uno y otro que cosa y así quizá se nos ocurra como mejorar el rendimiento, a mi es un tema que me carcome desde siempre XD.. si te apetece debatir sobre como mejorar esto..
Hombre, creo que aun no habeis entendido que el gestor de los procesos de DIV consuma muchisimos recursos y no se puede programar en lenguajes como Java, JS o similares, no estan pensados para esos tipos de algoritmos, para tenerlos eficientes hay que programarlos en Assembly, C o C++ (este ultimo tambien hay que programarlo de cierta forma porque la OOP introduce overhead, sino se pierderia de rendimiento).
Lo que se puede hacer con estos lenguajes como Java/JS/etc... es mejorar el engine en cuanto a capacidades, no en cuanto a rendimiento.
Como nota de offtopic, el JDIV no utilizaba un thread para los procesos, sino que cada proceso se creaba en un thread, por ende si tenias 100 procesos eran 100 threads, eso no solo consuma tambien varios recursos, ma crea un monton de problemas de sincronizacion, ademas reduce mucho el numero de procesos disponibles, donde por ejemplo hay plataformas que no soportan mas de 16 threads.