Отмена задачи C# без причиныC#

Место общения программистов C#
Ответить
Anonymous
 Отмена задачи C# без причины

Сообщение Anonymous »


Мне нужно проанализировать среднее время взлома паролей различной длины. Я пытаюсь выполнить несколько вычислений параллельно, а затем найти среднее время. В коде есть Console.WriteLine для отслеживания хода выполнения функций. Вот код:
публичный частичный класс SecondTask: Форма { публичная вторая задача() { ИнициализироватьКомпонент(); } частная пустота CountAverageForLength (длина целого числа) { Console.WriteLine(DateTime.Now.TimeOfDay.ToString()); Задача [] задачи = новая Задача [5]; List times = новый List(); Обработчик PasswordTakingTimeHandler = новый PasswordTakingTimeHandler (раз, длина); for (int NumberOfTask = 0; NumberOfTask CountAndAddTimeOfTakingPassword(обработчик)); вернуть новую задачу; } общедоступный статический TimeSpan AverageTime (интервалы IEnumerable) { double doubleAverageTicks = spans.Average(timeSpan => timeSpan.Ticks); длинный longAverageTicks = Convert.ToInt64(doubleAverageTicks); вернуть новый TimeSpan(longAverageTicks); } частная пустота GenerateChartButton_Click (отправитель объекта, EventArgs e) { CountAverageForLength(3); Console.WriteLine("Некоторый текст"); } общедоступная структура PasswordTakingTimeHandler { общедоступный список spanList; общественный int парольдлина; public PasswordTakingTimeHandler (List spanList, int passLength) { this.spanList = spanList; this.passwordLength = passLength; } } }
Вот код PasswordController:

общедоступный класс PasswordController { общедоступная строка? Пароль {получить; частный набор; } общественный ulong AttemptsToTakePassword {get; частный набор; } public void GeneratePassword (длина целого числа) { Пароль = PasswordGenerator.GeneratePasswordWithLength(длина); } общедоступная асинхронная задача AnalyseTimeToTakePasswordAsync (секундомер) { ПопыткиToTakePassword = 0; нить? сгенерированнаяСтрока = ноль; while (generatedString != Пароль) { сгенерированнаяСтрока = Генератор Пароля.СоздатьПарольСДлиной(Пароль.Длина); ПопыткиВзятьПароль++; } секундомер.Стоп(); } общедоступный секундомер AnalyseTimeToTakePasswordSync (секундомер) { ПопыткиToTakePassword = 0; нить? сгенерированнаяСтрока = ноль; while (generatedString != Пароль) { сгенерированнаяСтрока = Генератор Пароля.СоздатьПарольСДлиной(Пароль.Длина); ПопыткиВзятьПароль++; } секундомер.Стоп(); вернуть секундомер; } общедоступный статический класс PasswordGenerator { частная статическая строка _validSymbols = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789"; частный статический Random _rand = новый Random(); частный статический символ GetRandomSymbol => _validSymbols[_rand.Next(_validSymbols.Length)]; частный статический StringBuilder _builder = новый StringBuilder(); общедоступная статическая строка? GeneratePasswordWithLength (длина целого числа) { _builder.Очистить(); for (int index = 0; index < длина; index++) { _builder.AppendFormat(GetRandomSymbol.ToString()); } вернуть _builder.ToString(); } } } Проблема в том, что не все Задачи завершают свою работу даже после длительного ожидания в 5-10 минут (расчеты в одном потоке показывают, что среднее время взлома 3-значного пароля составляет около 1,2 секунды). Это консольный текст после 12 минут работы:

12:43:53.0182256 Начать ждать Нормальный Подсчитанные задачи Немного текста Начал анализировать время Начал анализировать время Начал анализировать время Начал анализировать время Начал анализировать время интервал 00:00:00.0007325 Как можно решить эту проблему?

Я пытался увеличить/уменьшить количество задач, использовал профилировщик для проверки StackOverflow, ничего не помогло
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»