2017-03-06 7 views
1

私は多くの小さな関数で自分のコードを分割しましたが、時にはトランザクション内で一緒に実行されることを意図しています。だから私はどこかでRealmを作成し、writeブロックを開き、このブロックの中で私はすべての私の関数を呼び出します。各操作のRealmインスタンスを作成する際のオーバーヘッド/問題?

これまでのところ、私はのような呼び出しのために関数にパラメータとしてRealmインスタンスを渡していましたが、これは本当に必要なのでしょうか?それが必要な場合は、Realmの新しいインスタンスを作成するだけの短所はありますか?これが問題ではない場合は、この新しいレルムが、別のレルムインスタンスによって開始されたトランザクションの内部で使用されている場合は、おそらくこれが問題になる場合もあります。

最後に、更新用の通知ブロックの実行を抑止するために使用される通知トークンに問題があるかどうかも疑問です。これについては、使用している特定のRealmインスタンスは問題ありません。

P.S.私は同じスレッドでRealmを使用することについてのみ話している、私はマルチスレッドの制限を認識しています。

+0

レルムを使用しているプラ​​ットフォームはどれですか?私はスウィフトを仮定します。 – AustinZ

+1

@AustinZ Edited!私はrealm-cocoaタグを選択しましたが、何らかの理由でStackOverflowがそれを無視します。 – Ixx

答えて

3

コードをそのように構造化したい場合は、関数間にRealmのインスタンスを渡すことに害はありません。 Realm Cocoaには、同じスレッド上でRealmsを配布するときに使用する内部キャッシュがあるため、同じスレッド上に複数のRealmインスタンスを開く場合には、かなりのオーバーヘッドはありません。

私は何度オープニングRealm Sに対する一つの可能​​な引数は、try!を使用するか、またはdoRealmを開くしようとするたびラップする必要がありますどちらかということであると仮定 - catchブロックを。ただし、多くの場合、Realmインスタンスを作成してレルムを正常に開いた場合、そのインスタンスはファイル関連のエラーを引き起こすことはありません(基礎となるデータベースファイルを移動してレルムを乱用しない限り)。

また、特定のRealmインスタンスによって販売さ、または他のRealmインスタンスのライト・トランザクション内で1つのRealmインスタンスを使用していなかった通知トークンを心配する必要はありません。あなたが実際に同じスレッドで作業している場合、Realmはあなたが記述した状況でうまく動作するはずです。

パフォーマンスの問題に遭遇した場合にのみ、最適化について心配する方が良いでしょう。また、Instrumentsでは特定の操作が潜在的なパフォーマンスボトルネックであると認識しています。あなたの場合は、あなたの個人的な嗜好に合ったソリューションを選択することができます。

+1

偉大な答え、ありがとう!私の疑問はクリアされています:) – Ixx

関連する問題