Gibt es sowas wie <?> unter C++?
-
pumuckl schrieb:
...zwei Möglichkeiten: die "Größe" (= Zahl der Ecken) jedes Polygons zur Compilezeit festlegen -> alles mit Templates, oder zur Laufzeit -> keine Templates, dafür dynamische Speicherverwaltung.
Plus die "Frickellösungen" (die bisweilen tatsächlich optimal sein können); z.B.:
- eigene Speicherverwaltung
- "feste templates"(Ideenskizze !!!)
template <int DIM> struct Polygon { }; template <typename T> T f(T const& dummy){ ... } int main() { //... if(irgendeinKriterium) { vector<Polygon<4> > myPolys(1000); myPoly[2] = f(myPoly[0]); } else { vector<Polygon<16> > myPolys(1000); myPoly[2] = f(myPoly[0]); }Nicht unbedingt schön und auch nur für kleine konkrete Zahlen anzuraten, aber bei recht aufwendigem f() kann das schon das geringere Übel sein....
Gruß,
Simon2
-
Rock Lobster schrieb:
Ich moechte kein new im Konstruktor haben, damit die Werte moeglichst auf dem Stack abgelegt werden. Im Moment habe ich die new-Version und das ist einfach zu langsam (da extrem viele dieser Polygone instanziiert werden).
Bist du sicher, dass das am
newalleine liegt? Hat dir dein Profiler gesagt, dass die Funktionoperator newden kritischen Teil der Zeit beansprucht?Ich würde eher raten, eine eigene Speicherverwaltung einzurichten, was in diesem Thread auch schon mehrmals erwähnt wurde. Dadurch kannst du dir vielen Speicher aufs Mal anfordern und den dann nach und nach verteilen. Aber der Stack eignet sich nicht für extrem viele oder grosse Objekte.
-
Hallo Christian,
gib uns mal etwas mehr Code. Ich kann mir beim besten Willen nicht vorstellen,
dass das wirklich das Problem in deinem Programm ist. Über wieviele Objekte
innerhalb welches Zeitraums unterhalten wir uns denn?Gruß,
CSpille
-
Im Moment ist der Server down, aber im Laufe des Tages werd ich nochmal testen und kann dann auch mehr zur Datenmenge und zur Laufzeit sagen. Ich habe keinen Profiler verwendet, aber innerhalb der Schleife passiert eigentlich auch nicht wesentlich mehr als das Anlegen von Objekten, und laut System Monitor ist die CPU mehr ausgelastet als das Netzwerk. Wie gesagt, ich werd heut nochmal ein bisschen rumprobieren, dann werd ich hier mehr dazu sagen koennen.
-
Rock Lobster schrieb:
laut System Monitor ist die CPU mehr ausgelastet als das Netzwerk.
Na und? Das heißt doch nur dass dein Rechner derweil nicht unnötig Zeit verschwendet indem er auf Antworten aus dem Netz wartet sondern die Zeit zum Rechnen nutzt.
-
Nur gibt es da nicht viel zu rechnen, daher wundert es mich schon sehr stark. Er muss nur Daten lesen und in eine Struktur schreiben und diese in einen vector packen. Naja ich werds austesten sobald der Server wieder laeuft, ich hoffe mal das wird heut noch was
