private void StatusUpdate() { //lock (StatusObjectLocker) //{ // get memory usage for status update string memorynumber; using (Process proc = Process.GetCurrentProcess()) { long memorySize64 = proc.PrivateMemorySize64; memorynumber = BytesToString(memorySize64); } TaskCounters shareTaskCounters = ShareTaskScheduler.Scheduler.GetTaskCounters(); TaskCounters treeTaskCounters = TreeTaskScheduler.Scheduler.GetTaskCounters(); TaskCounters fileTaskCounters = FileTaskScheduler.Scheduler.GetTaskCounters(); StringBuilder updateText = new StringBuilder("Status Update: \n"); updateText.Append("ShareFinder Tasks Completed: " + shareTaskCounters.CompletedTasks + "\n"); updateText.Append("ShareFinder Tasks Remaining: " + shareTaskCounters.CurrentTasksRemaining + "\n"); updateText.Append("ShareFinder Tasks Running: " + shareTaskCounters.CurrentTasksRunning + "\n"); updateText.Append("TreeWalker Tasks Completed: " + treeTaskCounters.CompletedTasks + "\n"); updateText.Append("TreeWalker Tasks Remaining: " + treeTaskCounters.CurrentTasksRemaining + "\n"); updateText.Append("TreeWalker Tasks Running: " + treeTaskCounters.CurrentTasksRunning + "\n"); updateText.Append("FileScanner Tasks Completed: " + fileTaskCounters.CompletedTasks + "\n"); updateText.Append("FileScanner Tasks Remaining: " + fileTaskCounters.CurrentTasksRemaining + "\n"); updateText.Append("FileScanner Tasks Running: " + fileTaskCounters.CurrentTasksRunning + "\n"); updateText.Append(memorynumber + " RAM in use."); Mq.Info(updateText.ToString()); if (FileTaskScheduler.Done() && ShareTaskScheduler.Done() && TreeTaskScheduler.Done()) { AllTasksComplete = true; } //} }
private void StatusUpdate() { //lock (StatusObjectLocker) //{ // get memory usage for status update string memorynumber; using (Process proc = Process.GetCurrentProcess()) { long memorySize64 = proc.PrivateMemorySize64; memorynumber = BytesToString(memorySize64); } TaskCounters shareTaskCounters = ShareTaskScheduler.Scheduler.GetTaskCounters(); TaskCounters treeTaskCounters = TreeTaskScheduler.Scheduler.GetTaskCounters(); TaskCounters fileTaskCounters = FileTaskScheduler.Scheduler.GetTaskCounters(); StringBuilder updateText = new StringBuilder("Status Update: \n"); updateText.Append("ShareFinder Tasks Completed: " + shareTaskCounters.CompletedTasks + "\n"); updateText.Append("ShareFinder Tasks Remaining: " + shareTaskCounters.CurrentTasksRemaining + "\n"); updateText.Append("ShareFinder Tasks Running: " + shareTaskCounters.CurrentTasksRunning + "\n"); updateText.Append("TreeWalker Tasks Completed: " + treeTaskCounters.CompletedTasks + "\n"); updateText.Append("TreeWalker Tasks Remaining: " + treeTaskCounters.CurrentTasksRemaining + "\n"); updateText.Append("TreeWalker Tasks Running: " + treeTaskCounters.CurrentTasksRunning + "\n"); updateText.Append("FileScanner Tasks Completed: " + fileTaskCounters.CompletedTasks + "\n"); updateText.Append("FileScanner Tasks Remaining: " + fileTaskCounters.CurrentTasksRemaining + "\n"); updateText.Append("FileScanner Tasks Running: " + fileTaskCounters.CurrentTasksRunning + "\n"); updateText.Append(memorynumber + " RAM in use." + "\n"); updateText.Append("\n"); // if all share tasks have finished, reduce max parallelism to 0 and reassign capacity to file scheduler. if (ShareTaskScheduler.Done() && (shareTaskCounters.MaxParallelism >= 1)) { // get the current number of sharetask threads int transferVal = shareTaskCounters.MaxParallelism; // set it to zero ShareTaskScheduler.Scheduler._maxDegreeOfParallelism = 0; // add 1 to the other FileTaskScheduler.Scheduler._maxDegreeOfParallelism = FileTaskScheduler.Scheduler._maxDegreeOfParallelism + transferVal; updateText.Append("ShareScanner queue finished, rebalancing workload." + "\n"); } // do other rebalancing if (fileTaskCounters.CurrentTasksQueued <= (MyOptions.MaxFileQueue / 20)) { // but only if one side isn't already at minimum if (FileTaskScheduler.Scheduler._maxDegreeOfParallelism > 1) { updateText.Append("Insufficient FileScanner queue size, rebalancing workload." + "\n"); --FileTaskScheduler.Scheduler._maxDegreeOfParallelism; ++TreeTaskScheduler.Scheduler._maxDegreeOfParallelism; } } if (fileTaskCounters.CurrentTasksQueued == MyOptions.MaxFileQueue) { if (TreeTaskScheduler.Scheduler._maxDegreeOfParallelism > 1) { updateText.Append("Max FileScanner queue size reached, rebalancing workload." + "\n"); ++FileTaskScheduler.Scheduler._maxDegreeOfParallelism; --TreeTaskScheduler.Scheduler._maxDegreeOfParallelism; } } updateText.Append("Max ShareFinder Threads: " + ShareTaskScheduler.Scheduler._maxDegreeOfParallelism + "\n"); updateText.Append("Max TreeWalker Threads: " + TreeTaskScheduler.Scheduler._maxDegreeOfParallelism + "\n"); updateText.Append("Max FileScanner Threads: " + FileTaskScheduler.Scheduler._maxDegreeOfParallelism + "\n"); DateTime now = DateTime.Now; TimeSpan runSpan = now.Subtract(StartTime); updateText.Append("Been Snafflin' for " + runSpan + " and we ain't done yet..." + "\n"); Mq.Info(updateText.ToString()); if (FileTaskScheduler.Done() && ShareTaskScheduler.Done() && TreeTaskScheduler.Done()) { waitHandle.Set(); } //} }