realm-java: Iterating result very slow
Hi,
Here are my java classes :
public class PublicArticleEntity extends RealmObject {
/**
* For fast import no @PrimaryKey defined
*/
private String id;
private String type;
@Index
private String manufacturerId;
private Boolean sterilizable;
private Boolean active;
private Date importModified;
private RealmList<PublicArticlePartNumberEntity> partNumbers = new RealmList<>();
private RealmList<PublicArticleCodificationEntity> codifications = new RealmList<>();
public class PublicArticlePartNumberEntity extends RealmObject {
@Index
private String partNumber;
@Index
private String normalizedPartNumber;
private PublicArticleEntity publicArticle;
}
public class PublicArticleCodificationEntity extends RealmObject {
@Index
private String type;
@Index
private String value;
private PublicArticleEntity publicArticle;
}
And here is the piece of code where I have a problem. The query returns 24 results and I use the limit
to get the 21 first elements. It tooks 2000ms to do the iteration 😮
RealmResults<PublicArticlePartNumberEntity> entities = realm.where(PublicArticlePartNumberEntity.class)
.equalTo("publicArticle.manufacturerId", manufacturerId.toString())
.beginGroup()
.contains("partNumber", search, Case.INSENSITIVE)
.or()
.contains("normalizedPartNumber", search, Case.INSENSITIVE)
.endGroup()
.findAllSorted("partNumber", Sort.ASCENDING);
Set<String> items = new HashSet<>();
int listSize = entities.size();
for (int i = 0; i < listSize && i < limit; i++) {
items.add(entities.get(i).getPartNumber());
}
Here the state of each :
Because Realm is using lazy loading the request if very very fast, but the for
is taking 2s.
Did I miss something ?
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Comments: 31 (25 by maintainers)
Commits related to this issue
- update tableview in Results.size() The orignal purpose of not creating TableView in size() is to make the call faster if the query has not been executed before. But in the real usecases, users always... — committed to realm/realm-object-store by beeender 7 years ago
- Rename update_tableveiew and expose it to public Normally size() is much faster than creating the tableview. But in some cases, like string relevant queries, the size() and creating the tableview may... — committed to realm/realm-object-store by beeender 7 years ago
- Rename update_tableveiew and expose it to public Normally size() is much faster than creating the tableview. But in some cases, like string relevant queries, the size() and creating the tableview may... — committed to realm/realm-object-store by beeender 7 years ago
- Evaluate queries immediately for sync queries - OsResults.load() actually does evaluate queries if needed now by using newly exposed OS method Results.evaluate_query_if_needed(). So the Results's... — committed to realm/realm-java by beeender 7 years ago
- Evaluate queries immediately for sync queries - OsResults.load() actually does evaluate queries if needed now by using newly exposed OS method Results.evaluate_query_if_needed(). So the Results's... — committed to realm/realm-java by beeender 7 years ago
So here is the test as @beeender requested. I’m in debug mode so it takes more time and on a production device that is waaaaaay slower than my One Plus 3T, but it’s a good thing to see differences.
First test with current code (not changed) :
Test with code