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());
                    }
                }
        }
Exemple #5
0
        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"));
                        });
                    }
        }