Frage

Ich schreibe eine Plug-in für ein 3D-Modellierungsprogramm. Es gibt aa Merkmal der API, wo Sie die Display-Pipeline abfangen und zusätzliche Geometrie einfügen, die tatsächlich mit out angezeigt werden in dem Modell zu sein (man kann es sehen, aber Sie können nicht wählen / verschieben / löschen usw. etc ..) .

Ein Teil dieses Merkmals der API ist eine Methode, die auf jeder Bildschirmaktualisierung aufgerufen wird, das verwendet wird, um das Programm, was zusätzliche Geometrie Anzeige zu erzählen. Im Moment habe ich eine HashSet , die durch mit einer foreach-Anweisung iteriert. OnBrep ist die allgemeine Geometrie Klasse der API.

ich einen zusätzlichen Befehl haben, die die „Ghost“ Geometrie in das eigentliche Modell wird Dump. Ich habe festgestellt, dass, wenn die Geometrie tatsächlich in dem Modell ist das Display sehr beschleunigt. Also ich frage mich, ob es ein schnellerer Weg ist die Liste der Objekte, um das Programm zur Verfügung gestellt? Würde ein einfaches eindimensionales Array deutlich schneller sein als ein HashSet <>?

War es hilfreich?

Lösung

Der schnellste Weg, um eine Sammlung von Objekten zurückzukehren entweder zurückzukehren (a) die tatsächliche physische Art, die intern verwendet wurde, um die Sammlung zu bauen, oder (b) eine Art, die in einer solchen Art und Weise gegossen werden kann, dass Daten wird nicht in den Speicher kopiert. Sobald Sie das Kopieren von Daten beginnen (zum Beispiel CopyTo, ToArray, ToList, eine Kopie Konstruktor, etc) Sie verlorene Zeit.

sagte, dass haben, es sei denn, die Anzahl der Elemente groß ist, ist dies eine Mikro-Optimierung sein wird und daher wahrscheinlich nicht lohnt. In diesem Fall zurückkehren nur die Sammlung Typ, der von den meisten Nutzen für die Telefonvorwahl wäre. Wenn Sie unusure sind, tun einige Timing-Tests eher als eine Vermutung nehmen.

Andere Tipps

Dieses hier ist ein umfangreiches Studie über die Leistung von Hashset / Wörterbuch / generische Liste

Aber es ist über Schlüssel-Lookups

personnaly Ich denke, dass eine normale oder generische Liste ist schneller für einen foreach Betrieb, da es keine indizierten Elemente beinhaltet / Overhead (esp Einfügen etc sollte schneller sein) .... Aber das ist nur ein Bauchgefühl.

In der Regel, wenn sie mit 3D-Grafik arbeiten, können Sie die beste Leistung, wenn man die Auslosung Anrufe / Zustandsänderungen so weit wie möglich verwalten zu reduzieren.

In Ihrem Fall würde ich versuchen, die Verlosung Anrufe auf ein Minimum zu reduzieren, indem Sie Ihre geschmückte Geometrie verschmelzen oder zu versuchen, irgendeine Art der Dosierung Funktion nutzen zu können, wenn es verfügbar ist.

Es ist sehr wahrscheinlich, dass der Rahmen Abfall ist nicht wegen einer Hash-Liste / Wörterbuch anstelle eines Arrays. (Es sei denn, es gibt eine gebrochene / teuer Hashfunktion irgendwo ...).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top