예제 #1
0
        public void TestJetThreadstatsSubtraction()
        {
            var t1 = new JET_THREADSTATS
            {
                cPageReferenced = 20,
                cPageRead       = 19,
                cPagePreread    = 18,
                cPageDirtied    = 17,
                cPageRedirtied  = 16,
                cLogRecord      = 15,
                cbLogRecord     = 14,
            };
            var t2 = new JET_THREADSTATS
            {
                cPageReferenced = 8,
                cPageRead       = 9,
                cPagePreread    = 10,
                cPageDirtied    = 11,
                cPageRedirtied  = 12,
                cLogRecord      = 13,
                cbLogRecord     = 14,
            };

            JET_THREADSTATS difference = t1 - t2;

            Assert.AreEqual(12, difference.cPageReferenced);
            Assert.AreEqual(10, difference.cPageRead);
            Assert.AreEqual(8, difference.cPagePreread);
            Assert.AreEqual(6, difference.cPageDirtied);
            Assert.AreEqual(4, difference.cPageRedirtied);
            Assert.AreEqual(2, difference.cLogRecord);
            Assert.AreEqual(0, difference.cbLogRecord);

            Assert.AreEqual(difference, JET_THREADSTATS.Subtract(t1, t2));
        }
예제 #2
0
        public void TestJetThreadstatsToStringPerf()
        {
            var t = new JET_THREADSTATS
            {
                cPageReferenced = 10,
                cPageRead       = 5,
                cPagePreread    = 4,
                cPageDirtied    = 3,
                cPageRedirtied  = 2,
                cLogRecord      = 1,
                cbLogRecord     = 0,
            };

            // Call the method once to make sure it is compiled.
            string ignored = t.ToString();

            const int      N = 100000;
            EsentStopwatch s = EsentStopwatch.StartNew();

            for (int i = 0; i < N; ++i)
            {
                ignored = t.ToString();
            }

            s.Stop();

            double ms = Math.Max(1, s.Elapsed.Milliseconds);

            EseInteropTestHelper.ConsoleWriteLine("{0} calls in {1} ({2} ms/call)", N, s.Elapsed, ms / N);
        }
예제 #3
0
        public void TestJetThreadstatsAddition()
        {
            var t1 = new JET_THREADSTATS
            {
                cPageReferenced = 1,
                cPageRead       = 2,
                cPagePreread    = 3,
                cPageDirtied    = 4,
                cPageRedirtied  = 5,
                cLogRecord      = 6,
                cbLogRecord     = 7,
            };
            var t2 = new JET_THREADSTATS
            {
                cPageReferenced = 8,
                cPageRead       = 9,
                cPagePreread    = 10,
                cPageDirtied    = 11,
                cPageRedirtied  = 12,
                cLogRecord      = 13,
                cbLogRecord     = 14,
            };

            JET_THREADSTATS sum = t1 + t2;

            Assert.AreEqual(9, sum.cPageReferenced);
            Assert.AreEqual(11, sum.cPageRead);
            Assert.AreEqual(13, sum.cPagePreread);
            Assert.AreEqual(15, sum.cPageDirtied);
            Assert.AreEqual(17, sum.cPageRedirtied);
            Assert.AreEqual(19, sum.cLogRecord);
            Assert.AreEqual(21, sum.cbLogRecord);

            Assert.AreEqual(sum, JET_THREADSTATS.Add(t1, t2));
        }
예제 #4
0
        public void VerifyThreadstatsCanBeSerialized()
        {
            var expected = new JET_THREADSTATS {
                cbLogRecord = 946
            };

            SerializeAndCompare(expected);
        }
예제 #5
0
        public void TestCreateSetsMembers()
        {
            JET_THREADSTATS actual = JET_THREADSTATS.Create(1, 2, 3, 4, 5, 6, 7);

            Assert.AreEqual(1, actual.cPageReferenced);
            Assert.AreEqual(2, actual.cPageRead);
            Assert.AreEqual(3, actual.cPagePreread);
            Assert.AreEqual(4, actual.cPageDirtied);
            Assert.AreEqual(5, actual.cPageRedirtied);
            Assert.AreEqual(6, actual.cLogRecord);
            Assert.AreEqual(7, actual.cbLogRecord);
        }
예제 #6
0
        public void JetGetThreadStats()
        {
            if (!EsentVersion.SupportsVistaFeatures)
            {
                return;
            }

            Api.JetBeginTransaction(this.sesid);
            Api.JetPrepareUpdate(this.sesid, this.tableid, JET_prep.Insert);
            byte[] data = new byte[65536];
            Api.JetSetColumn(this.sesid, this.tableid, this.columnid, data, data.Length, SetColumnGrbit.None, null);
            Api.JetUpdate(this.sesid, this.tableid);
            Api.JetCommitTransaction(this.sesid, CommitTransactionGrbit.LazyFlush);

            this.ResetCache();

            JET_THREADSTATS threadstatsBefore;

            VistaApi.JetGetThreadStats(out threadstatsBefore);

            Api.JetBeginTransaction(this.sesid);
            Api.JetMove(this.sesid, this.tableid, JET_Move.First, MoveGrbit.None);
            byte[] actual = Api.RetrieveColumn(this.sesid, this.tableid, this.columnid);
            Api.JetCommitTransaction(this.sesid, CommitTransactionGrbit.LazyFlush);

            Api.JetBeginTransaction(this.sesid);
            Api.JetPrepareUpdate(this.sesid, this.tableid, JET_prep.Insert);
            data = new byte[65536];
            Api.JetSetColumn(this.sesid, this.tableid, this.columnid, data, data.Length, SetColumnGrbit.None, null);
            Api.JetUpdate(this.sesid, this.tableid);
            Api.JetMove(this.sesid, this.tableid, JET_Move.Last, MoveGrbit.None);
            Api.JetPrepareUpdate(this.sesid, this.tableid, JET_prep.Replace);
            Api.JetSetColumn(this.sesid, this.tableid, this.columnid, data, data.Length, SetColumnGrbit.None, null);
            Api.JetUpdate(this.sesid, this.tableid);
            Api.JetCommitTransaction(this.sesid, CommitTransactionGrbit.LazyFlush);

            JET_THREADSTATS threadstatsAfter;

            VistaApi.JetGetThreadStats(out threadstatsAfter);

            JET_THREADSTATS threadstats = threadstatsAfter - threadstatsBefore;

            Assert.AreNotEqual(0, threadstats.cPageReferenced);
            Assert.AreNotEqual(0, threadstats.cPageRead);
            ////Assert.AreNotEqual(0, threadstats.cPagePreread);
            Assert.AreNotEqual(0, threadstats.cPageDirtied);
            Assert.AreNotEqual(0, threadstats.cPageRedirtied);
            Assert.AreNotEqual(0, threadstats.cLogRecord);
            Assert.AreNotEqual(0, threadstats.cbLogRecord);
        }
예제 #7
0
 public void Setup()
 {
     this.native = new NATIVE_THREADSTATS
     {
         cPageReferenced = 1,
         cPageRead       = 2,
         cPagePreread    = 3,
         cPageDirtied    = 4,
         cPageRedirtied  = 5,
         cLogRecord      = 6,
         cbLogRecord     = 7,
     };
     this.managed = new JET_THREADSTATS();
     this.managed.SetFromNativeThreadstats(this.native);
 }
예제 #8
0
        public void TestJetThreadstatsToString()
        {
            var t = new JET_THREADSTATS
            {
                cPageReferenced = 10,
                cPageRead       = 2,
                cPagePreread    = 3,
                cPageDirtied    = 4,
                cPageRedirtied  = 5,
                cLogRecord      = 6,
                cbLogRecord     = 7,
            };
            const string Expected = "10 page references, 2 pages read, 3 pages preread, 4 pages dirtied, 5 pages redirtied, 6 log records, 7 bytes logged";

            Assert.AreEqual(Expected, t.ToString());
        }
예제 #9
0
        public void TestJetThreadstatsToStringZero()
        {
            var t = new JET_THREADSTATS
            {
                cPageReferenced = 0,
                cPageRead       = 0,
                cPagePreread    = 0,
                cPageDirtied    = 0,
                cPageRedirtied  = 0,
                cLogRecord      = 0,
                cbLogRecord     = 0,
            };
            const string Expected = "0 page references, 0 pages read, 0 pages preread, 0 pages dirtied, 0 pages redirtied, 0 log records, 0 bytes logged";

            Assert.AreEqual(Expected, t.ToString());
        }
예제 #10
0
        public void TestJetThreadstatsToStringSingular()
        {
            var t = new JET_THREADSTATS
            {
                cPageReferenced = 1,
                cPageRead       = 1,
                cPagePreread    = 1,
                cPageDirtied    = 1,
                cPageRedirtied  = 1,
                cLogRecord      = 1,
                cbLogRecord     = 1,
            };
            const string Expected = "1 page reference, 1 page read, 1 page preread, 1 page dirtied, 1 page redirtied, 1 log record, 1 byte logged";

            Assert.AreEqual(Expected, t.ToString());
        }
예제 #11
0
 /// <summary>
 /// Retrieves performance information from the database engine for the
 /// current thread. Multiple calls can be used to collect statistics
 /// that reflect the activity of the database engine on this thread
 /// between those calls.
 /// </summary>
 /// <param name="threadstats">Returns the thread statistics data.</param>
 public static void JetGetThreadStats(out JET_THREADSTATS threadstats)
 {
     Api.Check(Api.Impl.JetGetThreadStats(out threadstats));
 }
예제 #12
0
 /// <summary>
 /// Retrieves performance information from the database engine for the
 /// current thread. Multiple calls can be used to collect statistics
 /// that reflect the activity of the database engine on this thread
 /// between those calls. 
 /// </summary>
 /// <param name="threadstats">Returns the thread statistics data.</param>
 public static void JetGetThreadStats(out JET_THREADSTATS threadstats)
 {
     Api.Check(Api.Impl.JetGetThreadStats(out threadstats));
 }