/// <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(); }
/// <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)); } }
// 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()); } }
// 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); }
/// <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(); }
/// <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)); } }
/// <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(); }
/// <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)); } }
/// <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)); } }