У меня есть две программы которые просто проверяют наличие процессов друг-друга методом System.Diagnostics.Process.GetProcessesByName
в цикле таким образом исключая возможность пользователя закрыть их без последствий, в теории всё должно работать нормально но результатом является 100% заполнение ЦП у обеих программ (при работе вместе, обе едят 40-50% ЦП).
Вопрос, есть ли какой-либо менее затратный способ? Или какой-либо способ сократить используемую память?
Способ на event-ах (объект синхронизации). Будет кушать минимум ресурсов.
Код пример, приложение 1. Для приложения 2 нужно заменить все 1 на 2 и наоборот.
static void AppCheck()
{
using (var appEvent = new EventWaitHandle(false, EventResetMode.ManualReset, "App1EventName"))
{
appEvent.Set();
while (true)
{
using (var otherAppEvent = new EventWaitHandle(false, EventResetMode.ManualReset, "App2EventName"))
{
otherAppEvent.WaitOne();
}
Console.WriteLine("App2 started");
var process = Process.GetProcessesByName("App2").First();
process.WaitForExit();
Console.WriteLine("App2 closed");
}
}
}
static void Main(string[] args)
{
var thread = new Thread(AppCheck);
thread.Start();
Console.ReadKey();
thread.Abort();
}
Совсем необязательно мотать бесконечный цикл. У класса Process есть метод WaitForExit и есть событие OnExited. Достаточно найти нужный процесс один раз, и потом или ждать его завершения Wait-ом, или подписаться на событие выхода, и в обработчике предпринимать действия по перезапуску, в зависимости от того, как лично вам удобнее.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хотелось бы узнать, есть ли способ использовать библиотеку LuaJIT в программе, написанной на C# по аналогии с C/C++Т
Мы используем связку (клиент WPF) -> EF 62