Как я могу предотвратить отставание моей Java-программы во время работы других приложений? - PullRequest
1 голос
/ 08 марта 2011

Я написал простой код на Java, который использует класс Robot для перемещения мыши в соответствии с некоторыми условиями.

Несмотря на то, что код работает хорошо, кажется, что во время работы других приложений наблюдается задержка.

Я думаю, у Java есть проблемы с отправкой системных сообщений.

Есть ли обходной путь, чтобы избежать этого?

1 Ответ

1 голос
/ 17 июля 2012

Прежде чем начать думать о сокращении отставания, вы должны сначала понять его причины.Я представлю ответ (ы) таким образом, чтобы вы могли понять «почему» вместе с «что делать».

По вашему описанию, задержка возникает только тогда, когда другие программы выполняютсяс вашим роботом наиболее вероятные причины задержки:


Недостаток системных ресурсов - Слишком много запущено одновременно, потребляя слишком много памяти / вычислительной мощноститаким образом заставляя ОС замедлять некоторые программы для возможности запуска других.

Что делать: Чтобы попытаться исправить такие проблемы, вы можете попытаться оптимизировать свой код, чтобы заставить его использовать меньше памяти / вычислительной мощности, тем самым уменьшая причину задержки, неявно уменьшая саму задержку.К сожалению, трудно, юридически сделать то же самое для любых сторонних программ, поэтому вряд ли можно полностью устранить задержку, если параллельные приложения не являются вашими.


Параллельность в отношении нереплицируемого, не подлежащий совместному использованию компонент - один или несколько компонентов, к которым нельзя получить доступ более чем одному процессу одновременно и которые нельзя клонировать в несколько экземпляров, должны использоваться более чем одним запущенным процессом.Хотя один процесс получает контроль над ним, другие процессы не имеют другого выбора, кроме как ждать освобождения компонента.

Что делать: В этом случае едва ли существует какой-либо другой законный методчем уменьшить приоритет одновременного процесса при увеличении ваших (эффективно замедляя их, чтобы ваша программа работала быстрее), или полностью их отключить.

Как это сделать: Чтобы увеличитьПриоритет процесса, это код, который устанавливает его на 80% (по умолчанию обычно 50%), вставляя на main():

Thread.currentThread().setPriority((int)(Thread.MAX_PRIORITY*0.8));

Примечание. Вы можете установить свой процесс«никогда» не отпускать любые необходимые компоненты, используя Thread.MAX_PRIORITY без умножения на 0.8, но это не рекомендуется , так как это в значительной степени приостановит любой процесс, требующий компонентов (квази-жечтобы отключить их, пока у вас работает), и если ваша программа по какой-либо причине зависает, то же самое произойдет, поскольку компоненты никогда не будут выпущены.

...