Hej Udviklere,
Jeg forsøger i et af mine projekter, at tegne 4 millioner prikker, samt streger imellem hver af prikkerne. Dette tager, alt for lang tid, og det ligner at programmet hakker, indtil alle prikkerne er blevet tegnet (hvilket godt kan tage lidt tid for 4millioner prikker).
Det framework, jeg benytter mig af på nuværende stund er swing i java 1.6
Er, der nogle af jer der har en idé til, hvordan man kan få lidt ekstra performance ud af denne del af koden ?... Jeg overvejde lidt, om det kunne svare sig at skifte til opengl, men ved dog ikke om det kan svare sig, når det kun er i 2d vi tegner ?
Indtil videre, er det følgende kode, der bliver benyttet til at tegne:
- protected void paintComponent(Graphics g) {
- Graphics2D g2d = (Graphics2D)g.create();
- g2d.clearRect(0, 0, getWidth(), getHeight());
- g2d.translate(0+marginX, getHeight()-marginY);
- g2d.scale(1, -1);
-
-
- if(his.history.size()!=0){
-
- //draw dots
- int cirkelWidth;
- if(currentStep < 50) {
- cirkelWidth = 10;
- }else if (currentStep < 150) {
- cirkelWidth = 8;
- }else if (currentStep < 300) {
- cirkelWidth = 6;
- }else if (currentStep < 500) {
- cirkelWidth = 4;
- }else {
- cirkelWidth = 2;
- }
-
-
- g2d.setColor(Color.RED);
-
- for (int i = 0; i <= currentStep; i++) {
-
-
- g2d.fillOval((int) (i*unitDistanceX-cirkelWidth/2), (int) (his.getHistoryItem(i).result*unitDistanceY-cirkelWidth/2), cirkelWidth, cirkelWidth);
-
-
- }
-
- for (int i = 0; i <= currentStep-1; i++) {
-
- g2d.drawLine((int) (i*unitDistanceX), (int) (his.getHistoryItem(i).result*unitDistanceY), (int) ((i+1)*unitDistanceX), (int) (his.getHistoryItem(i+1).result*unitDistanceY));
- }
- }
- //akser
- g2d.setColor(Color.black);
-
- g2d.drawLine(0, 0, maxWidth, 0);
-
- int tickY=10;
- for (int i = 1; i <= tickY; i++) {
- g2d.drawLine(-marginX/4,(int) (i*maxHeight/(double)tickY), marginY/4, (int) (i*maxHeight/(double)tickY));
- }
-
- g2d.drawLine(0, 0, 0, maxHeight);
-
-
- int tickX=10;
- for (int i = 1; i <= tickX; i++) {
- g2d.drawLine((int) (i*maxWidth/(double)tickX), -marginY/4, (int) (i*maxWidth/(double)tickX), marginY/4);
- }
-
-
- double step=currentStep/(double)tickX;
- g2d= (Graphics2D)g.create();
- g2d.translate(0+marginX, getHeight());
-
- for (int i = 1; i <= tickX; i++) {
- int stringWidht=g2d.getFontMetrics().stringWidth(""+((int)((step*i)*10))/(double)10);
- g2d.drawString(""+((int)(step*i*10))/(double)10, (int) (step*i*unitDistanceX)-stringWidht/2, (int)-(marginY/4));
-
- }
-
-
- g2d= (Graphics2D)g.create();
- g2d.translate(0+marginX, getHeight()-marginY);
- double result=(maxY-minY)/(double)tickY;
-
- for (int i = 1; i <= tickY; i++) {
- g2d.drawString(""+((int)((result*i+minY)*10))/(double)10, (int)(marginX/2), (int) -(result*i*unitDistanceY));
- }
-
- }