Exemple #1
0
        private static async Task ConnectionTask(IAppDb appDb, Func <IAppDb, Task> cb, int ops)
        {
            using (var db = appDb.New())
            {
                await db.Connection.OpenAsync();

                for (var op = 0; op < ops; op++)
                {
                    await cb(db);
                }
            }
        }
Exemple #2
0
        public static void Run(IAppDb appDb, int iterations, int concurrency, int ops)
        {
            var recordNum = 0;

            async Task InsertOne(IAppDb db)
            {
                var blog = new BlogPost(db)
                {
                    Title   = "Title " + Interlocked.Increment(ref recordNum),
                    Content = "Content " + recordNum
                };
                await blog.InsertAsync();
            }

            var selected = new ConcurrentQueue <BlogPost>();

            async Task SelectTen(IAppDb db)
            {
                var blogPosts = await(new BlogPostQuery(db)).Random10Async(recordNum);

                selected.Enqueue(blogPosts.FirstOrDefault());
            }

            var updatedNum = 0;

            async Task UpdateOne(IAppDb db)
            {
                BlogPost blogPost;

                if (selected.TryDequeue(out blogPost) && blogPost != null)
                {
                    blogPost.Db      = db;
                    blogPost.Content = "Content Updated " + Interlocked.Increment(ref updatedNum);
                    await blogPost.UpdateAsync();
                }
            }

            using (var db = appDb.New())
            {
                db.Connection.Open();
                using (var cmd = db.Connection.CreateCommand())
                {
                    cmd.CommandText = "DELETE FROM BlogPost";
                    cmd.ExecuteNonQuery();
                }
            }

            PerfTest(appDb, InsertOne, "Insert One", iterations, concurrency, ops).GetAwaiter().GetResult();
            using (var db = appDb.New())
            {
                db.Connection.Open();
                using (var cmd = db.Connection.CreateCommand())
                {
                    cmd.CommandText = "SELECT COUNT(*) FROM BlogPost";
                    Console.WriteLine("Records Inserted: " + cmd.ExecuteScalar());
                    Console.WriteLine();
                }
            }

            PerfTest(appDb, SelectTen, "Select Ten", iterations, concurrency, ops).GetAwaiter().GetResult();
            Console.WriteLine("Records Selected: " + selected.Count * 10);
            BlogPost firstRecord;

            if (selected.TryPeek(out firstRecord))
            {
                Console.WriteLine("First Record: " + firstRecord.Content);
            }
            Console.WriteLine();

            PerfTest(appDb, UpdateOne, "Update One", iterations, concurrency, ops).GetAwaiter().GetResult();
            Console.WriteLine("Records Updated: " + updatedNum);
            using (var db = appDb.New())
            {
                db.Connection.Open();
                var firstRecordUpdated = new BlogPostQuery(db).FindOne(firstRecord.Id);
                if (firstRecordUpdated != null)
                {
                    Console.WriteLine("First Record: " + firstRecordUpdated.Content);
                }
            }
        }