2017-03-06 4 views
1

J'ai divisé mon code en plusieurs petites fonctions qui sont parfois destinées à être exécutées ensemble dans une transaction. Donc, je crée quelque part un Realm et ouvre un bloc write, et à l'intérieur de ce bloc j'appelle toutes mes fonctions.Frais généraux/problèmes de création d'instances de domaine pour chaque opération?

Jusqu'à présent, j'ai transmis l'instance Realm en tant que paramètre aux fonctions afin d'être réutilisé (pour les appels comme realm.add), mais je me demande si cela est vraiment nécessaire? Y a-t-il des inconvénients à créer simplement une nouvelle instance du Realm là où c'est nécessaire? Je me demande également, dans le cas où ce n'est pas un problème, si le fait que ce nouveau domaine est utilisé dans une transaction qui a été "démarrée" par une autre instance de Realm, si c'est peut-être un problème. Enfin, je me demande aussi s'il y a des problèmes avec le jeton de notification utilisé pour supprimer l'exécution du bloc de notification pour les mises à jour - pour cela, l'instance Realm que j'utilise n'a pas d'importance, n'est-ce pas?

P.S. Je parle seulement d'utiliser Realm dans le même fil, je suis conscient des limitations multi-thread.

+0

Sur quelle plate-forme utilisez-vous Realm? Je suppose Swift, étant donné que vous avez mentionné des blocs? – AustinZ

+1

@AustinZ Edited! J'ai sélectionné la balise realm-cacoa mais pour une raison quelconque, StackOverflow l'ignore. – Ixx

Répondre

3

Il n'y a pas de mal à contourner Realm instances entre vos fonctions si vous souhaitez structurer votre code de cette façon. Il n'y a pas vraiment de surcharge appréciable pour ouvrir plusieurs instances Realm sur le même thread, car Realm Cocoa a un cache interne qu'il utilise lorsqu'il vend des Realms sur le même thread.

Je suppose un argument possible contre l'ouverture Realm s est à plusieurs reprises que vous devez soit utiliser try! ou envelopper chaque tentative d'ouvrir un Realm dans un do - bloc catch. Dans la plupart des cas, si vous avez ouvert un domaine en l'ouvrant à nouveau en créant plusieurs instances, les instances ne peuvent pas générer d'erreurs liées au fichier (tant que vous n'avez pas abusé de Realm en déplaçant le fichier de base de données sous-jacent).

Vous ne devriez pas avoir à vous soucier aussi sur les jetons de notification qui ne sont pas VENDUS par une Realm instance spécifique, ou en utilisant une Realm instance dans la transaction d'écriture d'une autre Realm exemple; Si vous travaillez sur le même sujet, Realm devrait fonctionner correctement dans les situations que vous avez décrites. Plus généralement, il est préférable de ne s'inquiéter de l'optimisation que si vous rencontrez des problèmes de performance et qu'Instruments a identifié une opération particulière comme étant un goulot d'étranglement potentiel. Dans votre cas, je pense que vous pouvez choisir la solution qui correspond le mieux à vos préférences personnelles.

+1

Bonne réponse, merci! Mes doutes sont effacés :) – Ixx