Почему консольное приложение занимает больше времени, чем приложение формы в c # - PullRequest
2 голосов
/ 24 января 2011

Я создал библиотеку классов (называемую GNGEngine.dll), которая выполняет некоторые функции обработки изображений.Эта dll содержит функцию ProcessBitmap () в качестве основной функции для поиска определенного шаблона.Я проверил движок, создав приложение чужих форм и взяв ссылку на dll.Я вызываю метод dll ProcessBitmap (), нажимая на кнопку.Приложение формы занимает 8 секунд, чтобы полностью обработать изображение.

Теперь в соответствии с требованиями клиентов я создал файл exe (консольное приложение) GNGEngineRunner.exe, который принимает имя файла изображения в качестве аргумента.Я создал объект класса dll, вызвал метод ProcessBitmap () и передал файл для его обработки.Это же изображение теперь занимает почти минуту для его обработки.

Есть ли какая-то конкретная причина, почему оно занимает слишком много времени?

Спасибо, что поделились своим ценным временем.

Ответы [ 2 ]

1 голос
/ 24 января 2011

Прежде всего вы должны прикрепить профилировщик, чтобы увидеть, что происходит. Если у вас его нет, вы можете использовать пробную версию по адресу http://www.red -gate.com / products / dotnet-development / ants-performance-profiler /

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

Во-вторых, для этого не должно быть причин. Я предполагаю, что проблема в том, что у вас возникают исключения из-за ссылки на несуществующий объект формы / GUI или подобный объект. Консоль управления или WinForm на 100% одинаковы, и вы даже можете смешивать их в одном приложении. Разница лишь в некоторых ссылках и в том, что вместо формы вы создаете консольное окно.

Не стесняйтесь добавлять больше деталей и, возможно, некоторый код.

1 голос
/ 24 января 2011

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

...