2017-03-06 5 views
1

Ich habe meinen Code in viele kleine Funktionen aufgeteilt, die manchmal zusammen innerhalb einer Transaktion ausgeführt werden sollen. Also erstelle ich irgendwo einen Realm und öffne einen write Block, und in diesem Block rufe ich alle meine Funktionen auf.Overhead/Probleme beim Erstellen von Realm-Instanzen für jede Operation?

Bisher habe ich die Realm Instanz als Parameter an die Funktionen übergeben, um wiederverwendet zu werden (für Anrufe wie realm.add), aber ich frage mich, ob das wirklich notwendig ist? Hat es irgendwelche Nachteile, einfach eine neue Instanz des Realm zu erstellen, wo immer es gebraucht wird? Ich frage mich auch, falls dies kein Problem ist, ob die Tatsache, dass dieses neue Realm innerhalb einer Transaktion verwendet wird, die von einer anderen Realm-Instanz "gestartet" wurde, wenn dies vielleicht ein Problem ist.

Endlich frage ich mich auch, ob es irgendwelche Probleme mit dem Benachrichtigungstoken geben kann, das verwendet wird, um die Ausführung des Benachrichtigungsblocks für Updates zu unterdrücken - dafür spielt die bestimmte Instanz, die ich verwende, keine Rolle, richtig?

P.S. Ich spreche nur über die Verwendung von Realm im selben Thread, ich kenne die Multi-Thread-Einschränkungen.

+0

Auf welcher Plattform verwenden Sie Realm? Ich nehme Swift an, dir die erwähnten Blöcke gegeben? – AustinZ

+1

@AustinZ Herausgegeben! Ich habe Realm-Cocoa-Tags ausgewählt, aber StackOverflow ignoriert sie aus irgendeinem Grund. – Ixx

Antwort

3

Es ist nicht schaden, Realm Instanzen zwischen Ihren Funktionen zu übergeben, wenn Sie Ihren Code so strukturieren möchten. Es gibt auch keinen nennenswerten Overhead beim Öffnen mehrerer Realm Instanzen in demselben Thread, da Realm Cocoa über einen internen Cache verfügt, den er beim Verkaufen von Realms für denselben Thread verwendet.

Ich nehme ein mögliches Argument gegen Öffnung Realm s ist immer wieder, dass Sie entweder try!, oder wickeln jeden Versuch verwenden, muss eine Realm in einem do zu öffnen - catch Block. In den meisten Fällen jedoch, wenn Sie ein Realm erfolgreich geöffnet haben, indem Sie es erneut öffnen, indem Sie mehr Realm Instanzen erstellen, können keine Dateifehler auftreten (solange Sie Realm nicht durch Verschieben der zugrunde liegenden Datenbankdatei missbraucht haben).

Sie sollten auch nicht zu Benachrichtigungs Token müssen befürchten, dass durch eine bestimmte Realm Instanz nicht vended geführt wurden, oder mit einer Realm Instanz innerhalb eines anderen Realm Schreibtransaktion der Instanz; Wenn Sie tatsächlich an demselben Thread arbeiten, sollte Realm in den von Ihnen beschriebenen Situationen gut funktionieren. (Und wenn nicht, bitte file a bug gegen uns!)

Allgemeiner gesagt, ist es besser, sich nur dann um Optimierung zu sorgen, wenn Sie Leistungsprobleme haben und Instruments einen bestimmten Vorgang als potenziellen Leistungsengpass identifiziert hat. In Ihrem Fall denke ich, dass Sie besser die Lösung wählen können, die Ihren persönlichen Vorlieben entspricht.

+1

Große Antwort, danke! Meine Zweifel sind geklärt :) – Ixx

Verwandte Themen