Aufruf habe ich eine Struktur wie dieviele Methoden von vielen Objekten viele Male pro Sekunde
abstract Class Entity {
//some variables...
//some methods ...
public abstract void render(Graphics g);
}
Das ist das Mutter ..Now I 3 Kinder haben ..
Class A extends Entity{}
Class B extends Entity{}
Class C extends Entity{}
Jede Klasse einige andere hat Sachen machen rendern. Ein Beispiel ist das Zeichnen eines gelben Kreises, der zweite grüne Text und das dritte Bild wird angezeigt.
Aber ... es ist eine Sache.
Class A have List<B>...
Class B have List<C>...
eine Einheit hat zum Beispiel 10 B ... und jeder B 20 Cs hat ... So, jetzt .. Ich habe eine Methode machen, die 60x pro Sekunde macht .. Und ich habe jeden anrufen machen Methode von jedem Objekt.
So habe ich so etwas wie diese
for(A a : listOfAs){
for(B b : listOfBs){
for(C c : listOfCs){
c.render(g);
}b.render(g);
}a.render(g);
}
Nun, wenn Sie sich vorstellen, ich habe viel mehr Objekte so, und ich nenne diese Methode 60x pro Sekunde ... Ich finde das wirklich ... wirklich schlechte Praxis. Ich weiß nicht, wie ich das besser lösen soll oder so ... Ich glaube nicht, dass dies für jede Schleife die beste Lösung ist oder nicht. Irgendwelche Ideen?
Ich dachte an das Kind wie die Umsetzung:
Entity x = new A(); ...
Entity y = new B(); ...
und so, aber einige der Klassen haben andere Methoden, wie das geschleift werden müssen, und ich kann sie nicht von den Eltern anrufen.
Für die Render-Methode ... bleiben Sie einfach bei der Tatsache, dass Sie einige Male in einer kurzen Zeit für eine lange Zeit wiederholen müssen.
Ich kann nicht durchkommen ... Ich bin hier für eine lange Zeit stecken geblieben und ich bin mir nicht sicher, wie ich das lösen soll.
ich wie Lambdas fühlen wäre schneller hier, da die verschachtelten foreach-Schleifen Schleifen auftreten 'listOfAs.count' *' listOfBs.count' * 'listOfCs.count' mal während einer Lambda richtig mit irgendeiner Form von HashJoin getan oder inner join kann es in 'listOfAs.count' +' listOfBs.count' + 'listOfCs.count' mal machen. Ich würde den Beweis dafür schreiben, aber das wird deine Frage nicht beantworten. – Adam
Das klingt nach einem Fall, in dem man seine Entities zuerst in ein temporäres Image rendert und dann das in paint/paintComponent malt ... Außerdem muss man nicht wirklich 60x pro Sekunde rendern; das Auge ist nur gut für etwa 24x – ControlAltDel
@Adam Ich bin mir nicht sicher, was Sie meinen, aber ich bin nicht ohne eine gute Erklärung, die ich fürchte, nicht überzeugt! Es gibt eine Reihe von Objekten, die durchlaufen werden müssen; keine Menge an Verbindung kann diese Zahl reduzieren, sicher? Mein Instinkt wäre stattdessen, über Nebenläufigkeit nachzudenken. Eine andere Optimierung könnte darin bestehen, herauszufinden, welche Pixel neu gezeichnet werden und nur den letzten Wert ziehen, obwohl die Kosten den Nutzen überwiegen könnten. – Oly