private void Balance() { BalancedThread[] array = this.balancedThreadList; if (array == null) { return; } Scheduler.Schedule(array[0].JobProcessor, this.threadBalancer, 500); ThreadLoad threadLoad = null; BalancedThread balancedThread = null; BalancedThread balancedThread2 = null; for (int i = 0; i < array.Length; i++) { ThreadLoad mostBurden = array[i].MostBurden; if (mostBurden != null && array[i].TotalLoad >= 128 && (threadLoad == null || mostBurden.PreviousLoad < threadLoad.PreviousLoad)) { balancedThread = array[i]; threadLoad = mostBurden; } else if (balancedThread2 == null || balancedThread2.TotalLoad > array[i].TotalLoad) { balancedThread2 = array[i]; } } if (balancedThread != null && balancedThread2 != null && balancedThread.TotalLoad >= balancedThread2.TotalLoad * 3) { balancedThread.Change(threadLoad, balancedThread2); } }