Beispiel #1
0
        public void Do2(Db db)
        {
            bool dispose = false;

            if (db == null)
            {
                dispose = true;
                db      = new Db("DATA");
#if (SERVER)
                db._db_internal.CallServer = (byte[] f) => { return(SocketTesting.CallServer(f)); };
#endif
#if (SOCKETS)
                db._db_internal.CallServer = (byte[] f) => { return(SocketTesting.CallServer(f, db)); };
#endif
#if (SOCKETS || SAMEDB || INDEXES || SERVER)
                using (var trans = new LinqdbTransaction())
                {
                    db.Table <BinaryData>(trans).Delete(new HashSet <int>(db.Table <BinaryData>().Select(f => new { f.Id }).Select(f => f.Id).ToList()));
                    trans.Commit();
                }
#endif
                DoInit = true;
            }
            this.db = db;

            var start_list = new List <BinaryData>(TransJob2.start);
            for (int i = 1; i < TransJob2.start; i++)
            {
                start_list.Add(new BinaryData()
                {
                    Id   = i,
                    Data = new byte[4] {
                        1, 2, 3, 4
                    }
                });
            }
            if (start_list.Any())
            {
                for (int i = 0; ; i++)
                {
                    var list = start_list.Skip(i * 50000).Take(50000).ToList();
                    if (!list.Any())
                    {
                        break;
                    }
                    using (var trans = new LinqdbTransaction())
                    {
                        db.Table <BinaryData>(trans).SaveBatch(list);
                        trans.Commit();
                    }
                }
            }


            TransJob2.errors  = 0;
            TransJob2.numbers = new List <int>();
            TransJob2.rg      = new Random();

            for (int j = 0; j < 5; j++)
            {
                var jobs = new List <TransJob2>();
                for (int i = 0; i < 10000; i++)
                {
                    jobs.Add(new TransJob2());
                }

                Parallel.ForEach(jobs, /*new ParallelOptions { MaxDegreeOfParallelism = 500 },*/ f =>
                {
                    TransJob2.Do(db);
                });
            }

            if (TransJob2.errors > 0)
            {
                throw new Exception("Assert failure 1");
            }
            var ids = db.Table <BinaryData>().Select(f => new { f.Id }).Select(f => f.Id).ToList();
            for (int i = 0; ; i++)
            {
                var ids_delete = ids.Skip(i * 50000).Take(50000).ToList();
                if (!ids_delete.Any())
                {
                    break;
                }
                using (var trans = new LinqdbTransaction())
                {
                    db.Table <BinaryData>(trans).Delete(new HashSet <int>(ids_delete));
                    trans.Commit();
                }
            }
            if (DoInit)
            {
#if (SERVER || SOCKETS)
                if (dispose)
                {
                    Logic.Dispose();
                }
#else
                if (dispose)
                {
                    db.Dispose();
                }
#endif
#if (!SOCKETS && !SAMEDB && !INDEXES && !SERVER)
                if (dispose)
                {
                    ServerSharedData.SharedUtils.DeleteFilesAndFoldersRecursively("DATA");
                }
#endif
            }
        }