public async Task Manage_OneTrans_BeginInvoke() { await GeneratePerfRangesForRealm(async (cache, size) => { var toWrite = PerfHelper.GenerateRandomDatabaseContents(size); var st = new Stopwatch(); st.Start(); await Task.Run(() => { using (var realmThread = new RealmThread(cache.Config)) { realmThread.BeginTransaction(); realmThread.BeginInvoke((threadSafeRealm) => { foreach (var kvp in toWrite) { var obj = new KeyValueRecord(); obj.Key = kvp.Key; obj.Value = kvp.Value; threadSafeRealm.Add(obj); } }); realmThread.CommitTransaction(); } }); st.Stop(); return(st.ElapsedMilliseconds); }); }
public async Task ObjectForPrimaryKey_Sequential() { await GeneratePerfRangesForBlock2(async (cache, size, keys) => { var st = new Stopwatch(); var toFetch = Enumerable.Range(0, size) .Select(_ => keys[prng.Next(0, keys.Count - 1)]) .ToArray(); await Task.Run(() => { st.Start(); var realmThread = new RealmThread(cache.Config); realmThread.BeginInvoke(threadSafeRealm => { foreach (var v in toFetch) { threadSafeRealm.ObjectForPrimaryKey <KeyValueRecord>(v); } }); realmThread.Dispose(); st.Stop(); }); return(st.ElapsedMilliseconds); }); }
public async Task ObjectForPrimaryKey_Parallel_SingleRealmThread() { await GeneratePerfRangesForBlock2(async (cache, size, keys) => { var st = new Stopwatch(); var toFetch = Enumerable.Range(0, size) .Select(_ => keys[prng.Next(0, keys.Count - 1)]) .ToArray(); await Task.Run(() => { st.Start(); using (var realmThread = new RealmThread(cache.Config)) { Parallel.ForEach( toFetch, key => { realmThread.BeginInvoke(threadSafeRealm => { var record = threadSafeRealm.ObjectForPrimaryKey <KeyValueRecord>(key); Assert.NotNull(record); }); }); } st.Stop(); }); return(st.ElapsedMilliseconds); }); }
//[Fact] //[TestMethodName] //public async Task GetAsync_RealmObject() //{ // await GeneratePerfRangesForBlock2(async (cache, size, keys) => // { // var st = new Stopwatch(); // var toFetch = Enumerable.Range(0, size) // .Select(_ => keys[prng.Next(0, keys.Count - 1)]) // .ToArray(); // await Task.Run(async () => // { // st.Start(); // using (var realmThread = new RealmThread(cache)) // { // var obj = await realmThread.GetAsync<KeyValueRecord>(threadsafeRealm => // { // var c = new KeyValueRecord() { Key = "Foo", Value = new byte[1] }; // return Task.FromResult(c); // }); // } // st.Stop(); // }); // return st.ElapsedMilliseconds; // }); //} public async Task GeneratePerfRangesForBlock2(Func <Realms.Realm, int, List <string>, Task <long> > block) { results = new Dictionary <int, long>(); dbName = default(string); var dirPath = default(string); using (Utility.WithEmptyDirectory(out dirPath)) using (var cache = await GenerateRealmDB(dirPath)) { List <string> keys = null; using (var realmThread = new RealmThread(cache.Config)) { realmThread.BeginInvoke(r => { keys = r.All <KeyValueRecord>().ToList().Select(x => x.Key).ToList(); }); } dbName = dbName ?? cache.GetType().Name; foreach (var size in PerfHelper.GetPerfRanges()) { results[size] = await block(cache, size, keys.ToList()); } } }
public void ThreadBeginInvoke() { string path; using (Utility.WithEmptyDirectory(out path)) using (var fixture = CreateRealmsInstance(path)) using (var t = new RealmThread(fixture.Config)) { t.BeginInvoke(r => { r.Write(() => { var obj = r.CreateObject <KeyValueRecord>(); obj.Key = "key"; }); }); t.Invoke(r => { Assert.NotNull(r.ObjectForPrimaryKey <KeyValueRecord>("key")); }); } }