C#
C#.Работа с процессами
Добрый вечер! мне нужно проверить список с названиями нужных мне процессов на наличие их активности в системе и если хотя бы процесс из листа запущен то программа не будет запускаться. Я написал код, но он не работает почему-то, можете помочь?
Ок. Уточню по алгоритму:
Вообще ошибка в сравнении. У Вас SelectedProcess увеличивается параллельно => Условно элемент из a[i] сравнивается элементом b[i], что, конечно, некорректно, когда каждый элемент надо искать по всему списку и есть повод оптимизировать поиск, если список сортирован. Н-р у Вас два контейнера
a[] = {"procexp", "procexp64} и b[] = {"system", "rundll"}
У Вас сравнение a[0] "procexp" с b[0] "system," a[1] "procexp64" с b[1] "rundll" и т. д.
Когда сравнение нужно проводить a[0] с b[0],b[1],b[2] и так пока либо не будет найдено сответствия, либо список закончен, либо не будет нарушено условие сортировки (если использовали).
Как проще:
Инициализация списков (без .Add) (в статье найдете List)
https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/object-and-collection-initializers
см. HashSet
https://docs.microsoft.com/ru-ru/dotnet/api/system.collections.generic.hashset-1?view=netframework-4.8
BinarySearch, если список сортирован:
https://docs.microsoft.com/ru-ru/dotnet/api/system.collections.generic.list-1.binarysearch?view=netframework-4.8
Если всё плохо и лениво:
Linq.Contains
https://docs.microsoft.com/ru-ru/dotnet/api/system.linq.enumerable.contains?view=net-5.0
или Intersect (пересечение двух множеств)
https://docs.microsoft.com/ru-ru/dotnet/api/system.linq.enumerable.intersect?view=net-5.0
Возможно с FirstOrDefault.
Вообще ошибка в сравнении. У Вас SelectedProcess увеличивается параллельно => Условно элемент из a[i] сравнивается элементом b[i], что, конечно, некорректно, когда каждый элемент надо искать по всему списку и есть повод оптимизировать поиск, если список сортирован. Н-р у Вас два контейнера
a[] = {"procexp", "procexp64} и b[] = {"system", "rundll"}
У Вас сравнение a[0] "procexp" с b[0] "system," a[1] "procexp64" с b[1] "rundll" и т. д.
Когда сравнение нужно проводить a[0] с b[0],b[1],b[2] и так пока либо не будет найдено сответствия, либо список закончен, либо не будет нарушено условие сортировки (если использовали).
Как проще:
Инициализация списков (без .Add) (в статье найдете List)
https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/object-and-collection-initializers
см. HashSet
https://docs.microsoft.com/ru-ru/dotnet/api/system.collections.generic.hashset-1?view=netframework-4.8
BinarySearch, если список сортирован:
https://docs.microsoft.com/ru-ru/dotnet/api/system.collections.generic.list-1.binarysearch?view=netframework-4.8
Если всё плохо и лениво:
Linq.Contains
https://docs.microsoft.com/ru-ru/dotnet/api/system.linq.enumerable.contains?view=net-5.0
или Intersect (пересечение двух множеств)
https://docs.microsoft.com/ru-ru/dotnet/api/system.linq.enumerable.intersect?view=net-5.0
Возможно с FirstOrDefault.
Faxriddin Artikov
Как понимать "Западломейкерам" ?
С процессами тут все хорошо, некорректно выполнено сравнение.
У тебя есть, скажем, список 1 2 3 и список 3 1 2. Ты сравниваешь 1 и 3, 2 и 1, 3 и 2 - и опаньки! ВНЕЗАПНО не находишь совпадений, хотя списки совершенно одинаковые.
Вывод? Очередной цулхацкер, который неспособен написать элементарный алгоритм поиска (спойлер: в c# даже не надо его самому писать, все уже реализовано стандартными методами, но цулхацкеры не читают мануалов, они изобретают велосипеды), но берется ваять что-то грандиозное.
У тебя есть, скажем, список 1 2 3 и список 3 1 2. Ты сравниваешь 1 и 3, 2 и 1, 3 и 2 - и опаньки! ВНЕЗАПНО не находишь совпадений, хотя списки совершенно одинаковые.
Вывод? Очередной цулхацкер, который неспособен написать элементарный алгоритм поиска (спойлер: в c# даже не надо его самому писать, все уже реализовано стандартными методами, но цулхацкеры не читают мануалов, они изобретают велосипеды), но берется ваять что-то грандиозное.
Faxriddin Artikov
Спасибо. Я не утверждал что я цулхацкер, я простой любитель писать мелкие программы, и то что я написал мне казалось логичным, и я произвел отладку и мне реально показалось странным то что этот код не чекает до конца.
Похожие вопросы
- Как выглядит сам процесс программирования на C#
- Стоит ли дальше учить C#?
- Программирование на C Sharp (C#)
- Сегодня начал учить c#, решил сделать калькулятор простой и столкнулся с такой ошибкой при компиляции, хелпуйте.
- Что лучше C# или C++?
- Зачем разбивать код в C# на отдельные классы?
- Помогите пожалуйста. Написать на C#
- (c#) Нужна помощь в работе со строками. (лучше если будет не само решение, а объяснение, спасибо)
- Python, C, C++, C#, Что выбрать-то?
- Помогите разобраться с заданием! C#