2010-05-31 3 views
2

У меня есть приложение, которое имеет некоторые проблемы с обработкой многопроцессорных систем. Это не приложение, в котором я испытываю особую привязанность к модификации и хотел бы избежать его, если это возможно. Тем не менее, я не над модификацией кода, если нужно. Приложение написано в VBA (и, следовательно, моя склонность избегать его касания).Как определить сродство процессора?

Мы заметили, что приложение работает довольно плавно, если мы настроим близость процессора к одному процессору, используя диспетчер задач, только проявляя нестабильность, когда аффинность процессора не установлена.

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

Другой вопрос: действительно ли можно изменить основной продукт VBA, чтобы справиться с его собственным сродством к процессору? Мне никогда не приходилось обращаться с этим каким-либо из моих приложений изначально, поэтому это (на данный момент) полностью выходит за рамки моего опыта.

Заранее спасибо

+0

Мне было бы интересно узнать, какие проблемы вы видите, когда сродство к процессору не установлено. Как эти проблемы проявляются? –

+0

@Gary McGill: Проблемы, которые мы видим (с Access 2003, для которого приложение было написано - и не будут работать в Access 2007/2010), - это сбои приложений и общая нестабильность доступа. Приложение было первоначально написано на одном процессоре CPU/single Core, и теперь у нас возникают проблемы с заменой. Приложение имеет все виды нестабильности на многопроцессорных и многоядерных машинах, но все еще отлично работает на старых машинах. Когда мы устанавливаем сродство к процессору, неустойчивость перестает быть проблемой. Приложение переписывается, но пока оно не завершено, мы застряли между камнем и твердым местом. – BenAlabaster

+0

Используете ли вы несколько потоков в приложении VBA? Если ограничение многопоточного приложения на один процессор повышает производительность, это обычно указывает на проблему ложного кэширования. –

ответ

2

Одним из способов вы можете сделать это с Windows Application Compatibility Toolkit.

Вы даете ему способ идентифицировать ваше приложение (например, по адресу .exe), а затем оно позволяет указать несколько настроек. Одной из них является сродство к процессору. Он создает базу данных, которая содержит все ваши настройки.

Это машина, поэтому это нехорошее решение для широко распространенного приложения, но если это приложение должно работать только на одной машине, это избавит вас от необходимости менять код.

+1

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

2

Вы можете использовать SysInternal-х PsExec, чтобы запустить приложение с определенным процессором сродством, например, привязать доступ к CPU 1 вызову

psexec.exe -a 1 "%ProgramFiles%\Microsoft Office\Office12\access.exe" 

Чтобы ответить на ваш второй вопрос: Как вы помечено вопрос с доступа-УВОЙ Я предполагаю, что ваш код VBA является решением Access. Затем ваш код VBA будет выполнен в процессе, т. Е. Вам придется изменить близость процессора к процессу access.exe. Невозможно изменить сродство двигателя VBA отдельно.

Однако, прежде чем указывать принадлежность процессора, убедитесь, что вы полностью осознаете последствия. Скручивание этой установки может иметь нежелательные эффекты. Хороший пример прочитать пост Раймонда Чена:

Psychic debugging: Why your expensive four-processor machine is ignoring three of its processors

+0

Наш I.T. менеджер нашел этот хак для создания приложения, которое не поддерживает многоядерную/многопроцессорную среду. ЭТО. тестирует, будет ли улучшаться привязка процессора к стабилизации приложения. Если да, то это будет I.T. инициатива. Меня попросили предоставить информацию с точки зрения развития. – BenAlabaster

Смежные вопросы