/// <summary>
        /// Run multithreaded operations.
        /// </summary>
        /// <param name="worker">The worker to use.</param>
        private static void StressThread(PerfTestWorker worker)
        {
            int numRecords   = 5000 * worker.RandomGenerator.Next(0, 10);
            int numRetrieves = 50 + worker.RandomGenerator.Next(0, 100);

            worker.InsertRecordsWithAddFunction(numRecords);
            worker.CloseReopenDictionary();

            worker.RepeatedlyRetrieveOneRecord(numRetrieves);
            worker.CloseReopenDictionary();
            worker.RepeatedlyRetrieveOneRecordWithTryGetValue(numRetrieves);
            worker.CloseReopenDictionary();
            worker.RepeatedlyRetrieveOneRecordWithBracketOperator(numRetrieves);
            worker.CloseReopenDictionary();
            worker.RetrieveAllRecords();
            worker.CloseReopenDictionary();

            worker.CloseReopenDictionary();
            worker.InsertRecordsWithBracketOperator(numRecords);
            worker.CloseReopenDictionary();
            worker.RepeatedlyRetrieveOneRecord(numRetrieves);
            worker.CloseReopenDictionary();
            worker.RepeatedlyRetrieveOneRecordWithTryGetValue(numRetrieves);
            worker.CloseReopenDictionary();
            worker.RepeatedlyRetrieveOneRecordWithBracketOperator(numRetrieves);
            worker.CloseReopenDictionary();
            worker.RetrieveAllRecords();
        }
Esempio n. 2
0
        /// <summary>
        /// Insert some records and then retrieve them.
        /// </summary>
        private void BeginReadTrxParallel()
        {
            const int NumRecords = 1000000;

            using (var worker = new PerfTestWorker(this.instance, this.database))
            {
                TimeAction("Begin Read Trx", () => worker.RepeatedlyBeginReadTrxParallel(NumRecords));
            }
        }
Esempio n. 3
0
        // UNDONE: Can this be moved to a Task-model?
#if !MANAGEDESENT_ON_WSA // Thread model has changed in Windows Store Apps.
        /// <summary>
        /// Perform a PerfTestWorker action on a separate thread.
        /// </summary>
        /// <param name="action">The action to perform.</param>
        /// <returns>The thread.</returns>
        private Thread StartWorkerThread(Action <PerfTestWorker> action)
        {
            var thread = new Thread(
                () =>
            {
                using (var worker = new PerfTestWorker(this.instance, this.database))
                {
                    action(worker);
                }
            });

            return(thread);
        }
        // UNDONE: Can this be moved to a Task-model?
#if !MANAGEDESENT_ON_WSA // Thread model has changed in Windows Store Apps.
        /// <summary>
        /// Perform a PerfTestWorker action on a separate thread.
        /// </summary>
        /// <param name="action">The action to perform.</param>
        /// <returns>The thread.</returns>
        private Thread StartWorkerThread(Action <PerfTestWorker> action)
        {
            var thread = new Thread(
                () =>
            {
                using (var worker = new PerfTestWorker())
                {
                    action(worker);
                }
            });

            return(thread);
        }
        /// <summary>
        /// Insert some records and then retrieve them.
        /// </summary>
        private void InsertReadSeek()
        {
            const int NumRecords = 100 * 1000;

            using (var worker = new PerfTestWorker())
            {
                TimeAction("Insert records", () => worker.InsertRecordsWithAddFunction(NumRecords / 2));
                TimeAction("Insert records with SetColumn", () => worker.InsertRecordsWithBracketOperator(NumRecords / 2));
                TimeAction("Read one record", () => worker.RepeatedlyRetrieveOneRecord(NumRecords));
                TimeAction("Read one record with JetRetrieveColumns", () => worker.RepeatedlyRetrieveOneRecordWithTryGetValue(NumRecords));
                TimeAction("Read one record with RetrieveColumns", () => worker.RepeatedlyRetrieveOneRecordWithBracketOperator(NumRecords));
                TimeAction("Read all records", worker.RetrieveAllRecords);
                TimeAction("Close/Reopen", () => worker.CloseReopenDictionary());
            }
        }
Esempio n. 6
0
        // UNDONE: Can this be moved to a Task-model?
#if !MANAGEDESENT_ON_WSA // Thread model has changed in Windows Store Apps.
        /// <summary>
        /// Perform a PerfTestWorker action on a separate thread.
        /// </summary>
        /// <param name="action">The action to perform.</param>
        /// <returns>The thread.</returns>
        private Thread StartWorkerThread(Action <PerfTestWorker> action)
        {
            var thread = new Thread(
                () =>
            {
                using (var worker = new PerfTestWorker(
                           this.longDictionary,
                           this.longDatabase,
                           this.stringDictionary,
                           this.stringDatabase))
                {
                    action(worker);
                }
            });

            return(thread);
        }
Esempio n. 7
0
        /// <summary>
        /// Run multithreaded stress string-related operations.
        /// </summary>
        /// <param name="worker">The worker to use.</param>
        private static void StringStressThread(PerfTestWorker worker)
        {
            const int NumRecords   = 10 * 1000;
            const int NumRetrieves = 100;

            worker.InsertStringRecordsWithBracketOperator(NumRecords);
            worker.RepeatedlyRetrieveOneStringRecord(NumRetrieves);
            worker.RepeatedlyRetrieveOneStringRecordWithTryGetValue(NumRetrieves);
            worker.RepeatedlyRetrieveOneStringRecordWithBracketOperator(NumRetrieves);
            worker.RetrieveAllStringRecords();

            worker.InsertStringRecordsWithAddFunction(NumRecords);
            worker.RepeatedlyRetrieveOneStringRecord(NumRetrieves);
            worker.RepeatedlyRetrieveOneStringRecordWithTryGetValue(NumRetrieves);
            worker.RepeatedlyRetrieveOneStringRecordWithBracketOperator(NumRetrieves);
            worker.RetrieveAllStringRecords();
        }
Esempio n. 8
0
        /// <summary>
        /// Insert some records and then retrieve them.
        /// </summary>
        private void InsertReadSeek()
        {
            const int NumRecords = 1000000;

            long[] keys = this.GetRandomKeys(NumRecords);

            using (var worker = new PerfTestWorker(this.instance, this.database))
            {
                TimeAction("Insert records", () => worker.InsertRecordsWithSetColumn(NumRecords / 2));
                TimeAction("Insert records with SetColumns", () => worker.InsertRecordsWithSetColumns(NumRecords / 2));
                TimeAction("Read one record", () => worker.RepeatedlyRetrieveOneRecord(NumRecords));
                TimeAction("Read one record with JetRetrieveColumns", () => worker.RepeatedlyRetrieveOneRecordWithJetRetrieveColumns(NumRecords));
                TimeAction("Read one record with RetrieveColumns", () => worker.RepeatedlyRetrieveOneRecordWithRetrieveColumns(NumRecords));
                TimeAction("Read one record with JetEnumerateColumns", () => worker.RepeatedlyRetrieveOneRecordWithEnumColumns(NumRecords));
                TimeAction("Read all records", worker.RetrieveAllRecords);
                TimeAction("Seek to all records", () => worker.SeekToAllRecords(keys));
            }
        }
Esempio n. 9
0
        /// <summary>
        /// Run multithreaded operations.
        /// </summary>
        /// <param name="worker">The worker to use.</param>
        private static void StressThreadTrx(PerfTestWorker worker)
        {
            const int NumRecords   = 50000;
            const int NumRetrieves = 100;

            worker.InsertRecordsWithSetColumn(NumRecords);
            worker.RepeatedlyRetrieveOneRecord(NumRetrieves);
            worker.RepeatedlyRetrieveOneRecordWithJetRetrieveColumns(NumRetrieves);
            worker.RepeatedlyRetrieveOneRecordWithRetrieveColumns(NumRetrieves);
            worker.RepeatedlyRetrieveOneRecordWithEnumColumns(NumRetrieves);
            worker.RetrieveAllRecords();

            worker.InsertRecordsWithSetColumns(NumRecords);
            worker.RepeatedlyRetrieveOneRecord(NumRetrieves);
            worker.RepeatedlyRetrieveOneRecordWithJetRetrieveColumns(NumRetrieves);
            worker.RepeatedlyRetrieveOneRecordWithRetrieveColumns(NumRetrieves);
            worker.RepeatedlyRetrieveOneRecordWithEnumColumns(NumRetrieves);
            worker.RetrieveAllRecords();
        }
Esempio n. 10
0
        /// <summary>
        /// Insert some integer records and then retrieve them.
        /// </summary>
        private void InsertReadSeekLongs()
        {
            const int NumRecords = 100 * 1000;

            long[] keys = this.GetRandomKeys(NumRecords);

            using (var worker = new PerfTestWorker(
                       this.longDictionary,
                       this.longDatabase,
                       this.stringDictionary,
                       this.stringDatabase))
            {
                TimeAction("Insert records with Add()s", () => worker.InsertRecordsWithAddFunction(NumRecords / 2));
                TimeAction("Insert records with []", () => worker.InsertRecordsWithBracketOperator(NumRecords / 2));
                TimeAction("Read one record", () => worker.RepeatedlyRetrieveOneRecord(NumRecords));
                TimeAction("Read one record with JetRetrieveColumns", () => worker.RepeatedlyRetrieveOneRecordWithTryGetValue(NumRecords));
                TimeAction("Read one record with RetrieveColumns", () => worker.RepeatedlyRetrieveOneRecordWithBracketOperator(NumRecords));
                TimeAction("Read all records sequentially", worker.RetrieveAllRecords);
                TimeAction("Seek to all records randomly", () => worker.SeekToAllRecords(keys));
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Insert some string records and then retrieve them.
        /// </summary>
        private void InsertReadSeekStrings()
        {
            const int NumRecords = 100 * 1000;

            long[] keys = this.GetRandomKeys(NumRecords);
            IEnumerable <string> stringKeys = keys.Select((key) => { return(key.ToString()); });

            using (var worker = new PerfTestWorker(
                       this.longDictionary,
                       this.longDatabase,
                       this.stringDictionary,
                       this.stringDatabase))
            {
                TimeAction("Insert string record with Add()s", () => worker.InsertStringRecordsWithAddFunction(NumRecords / 2));
                TimeAction("Insert string records with []", () => worker.InsertStringRecordsWithBracketOperator(NumRecords / 2));
                TimeAction("Read one string record", () => worker.RepeatedlyRetrieveOneStringRecord(NumRecords));
                TimeAction("Read one string record with JetRetrieveColumns", () => worker.RepeatedlyRetrieveOneStringRecordWithTryGetValue(NumRecords));
                TimeAction("Read one string record with RetrieveColumns", () => worker.RepeatedlyRetrieveOneStringRecordWithBracketOperator(NumRecords));
                TimeAction("Read all string records", worker.RetrieveAllStringRecords);
                TimeAction("Seek to all string records randomly", () => worker.SeekToAllStringRecords(stringKeys));
            }
        }