Jump to content
Unity Insider Forum

Eine Frage des Gewichts...


Singular

Recommended Posts

Ich weiß nicht ob Scriptable Objects, Static Objects und Singletons Damen sind (und die Fragt man ja im allgemeinen nicht nach dem Gewicht) deswegen Frage ich nicht die, sondern euch ;)

Meine Frage ist womit fahre ich Arbeitsspeicher Technisch am besten?

Ich habe letztlich die Möglichkeit ein Problem über eine dieser drei Arten zu lösen. Unterm Strich sind das keine gigantischen Daten aber es geht auch eher um's prinziep.

Sagen wir daher ich will in jedem von Ihnen 10 int Werte speichern, (Also nahezu nichts) aber so, dass damit der Arbeitsspeicher nach möglichkeit am geringsten abgegriffen wird und so, dass man aus jeder Szene immer auf diese Daten zurück greifen kann. Was wäre also die beste Möglichkeit und welches die schlechteste?

Es muss nicht über lange Zeit gespeichert werden. Es geht um einen Szenenwechsel hin- und her.

*Ps: Ich weiß nicht ob das Thema zu Scripting passt ansonsten gerne verschieben*

Link zu diesem Kommentar
Auf anderen Seiten teilen

Von der Logik her müssten die Static Variablen der sparsamste Weg sein, denn die sind immer an der selben Stelle im Speicher. Sie belegen aber auch immer ihren Platz, egal ob sie gebraucht werden, oder nicht.

Es ist doch so, dass ein Szenenwechsel ja den alten Kram verwirft und alles neu einlädt, was in der neuen Szene jetzt nötig ist. Ein Scriptable Object, was ja an ein Script gebunden ist, wird mit dem Script neu eingeladen / verknüpft. Ein Singleton, was den Szenenwechsel überlebt, bleibt im Speicher. Aber wahrscheinlich wird in jeder Szene ein Singelton geladen (damit es beim laden einer bestimmten Szene auch da ist), was dann schaut ob es einzigartig ist und wenn nicht sich wieder zerstören würde.

Da passiert also noch viel mehr als nur ein Einladen und das kostet alles eine gewisse Zeit.

Hier und da würden also Daten neu eingelesen und in den Speicher geschoben werden. Nur von wo werden sie eingeladen? Sind sie nicht vielleicht schon längst im Speicher, weil die Engine weiß, dass sie fürs Spiel gebraucht werden? Ich weiß nicht, wie weit die Engine optimiert ist.
Was relativ langsam ist, ist ja das Laden von einem mechanischen Laufwerk. Alles Andere geht so schnell, dass du keinen Unterschied feststellen wirst.

Und wenn deine neue Szene nur eine einzige Textur oder einen Sound laden muss, die/der vorher noch nicht da war, dann sind deine paar Daten in den Variablen völlig nebensächlich.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Von der Schnelligkeit her denke ich auch, dass ein Scriptable Object am langsamsten und Static Object und Singleton recht schnell sind.

Die Größe war der ausschlaggebende Punkt. Ich denke was du sagst ob ich nun ein Static Object oder ein Scriptable Object nehme wird beides de, Speicher nicht sonderlich weh tun. Zumal es sich hier nicht um Gigantische Datenmengen handelt.

Ich denke ich werde dennoch den langsamsten und Arbeitsspeicher unanfälligsten Weg gehen und ein Scriptable Object nehmen.

Danke dir.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Stunden schrieb Singular:

Ich denke ich werde dennoch den langsamsten und Arbeitsspeicher unanfälligsten Weg gehen und ein Scriptable Object nehmen.

Du weißt aber, dass ScriptableObjects im Speicher gleich zweimal existieren? :)

Einmal gibt es das C++-Objekt, und dann das C#-Objekt als Wrapper.

Das Singleton-Ding dürfte aber langsamer sein, weil es mehr laden muss und, wie erwähnt, mehrere Male geladen wird. Einem SO kannst du beibringen, die gesamte Laufzeit über am Leben zu bleiben.

Mach dir mal um den Speicher nicht so viel Sorgen. Ich verstehe schon, das hier ist eine eher theoretische Frage. Aber man darf nicht vergessen, dass man auch hier nicht einfach die eine Skala ansehen kann und daran dann den Sieger festmachen kann. Wenn du Daten im Editor definieren willst, dann bringt dir ein statisches Ding nichts, weil der Editor da nicht reindeserialisieren wird. Das Singleton-Ding hat, wie so oft erwähnt, noch ganz andere Nachteile, die sich eher in der Wartbarkeit deines Projekts niederschlagen. Wenn es rein um den Platz geht, dann willst du eine statische Variable haben. In einer statischen Klasse. Das ist wirklich einfach nur der Wert, der da irgendwo im Speicher steht und fertig. Die anderen beiden, also ein GameObject (Singleton) und ScriptableObject, sind UnityEngine.Objects und damit mit einer bestimmten Menge Kram beladen. Dieser Kram ist der, der es erlaubt, diese Objekte im Editor mit Drag and Drop zu referenzieren, und um ihnen im Editor Werte zu geben. Wenn du das tun willst, dann musst du diesen Preis zahlen. Wenn nicht, dann nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...