2013-04-03 3 views
0

Я взял проект крюка для клавиатуры и немного подтолкнул его. Раньше это было всего 4 формы, в которых были все логики и математики в этих 4 файлах. Итак, МНОГИЕ часов спустя я просто получил программу обратно вместе, разобрав все. Последний бит - это использование концепции дизайна Model-View-Presenter в главном окне. Все мои тесты отлично работают на моей машине, и, естественно, программа работает так же, как на целевых компьютерах.Как мне показать ShowDialog?

Целевые компьютеры - простые процессоры Intel Atom x86 с 2 ГБ оперативной памяти. У них есть кнопки на них, которые коррелируют с F13-F18 на клавиатуре (то есть, когда вступает в игру моя программа с клавиатурой). Мой ПК для разработки - это полустационарный 6-ядерный процессор AMD x64 с 8 ГБ оперативной памяти. Единственное, что я хотел сделать, это проверить способ настройки этих функциональных кнопок на конкретную задачу. Все мои модульные тесты проходят для этой части. Когда я нажимаю на новый тип задачи, он работает по своему желанию.

«Прохладный», я говорю: «Позволяет увидеть его в действии», поэтому я нажму «Run» в Visual Studio. Моя программа, что F9-F12 - это ключи для перехвата. Теперь окно назначения открывается только тогда, когда вы нажимаете одну из подключенных клавиш, когда основное окно открыто. Если это главное окно не открыто, задача выполняется. Поэтому я открываю свое главное окно и нажимаю F9, а окно Assignment показывает, но я не могу нажимать на что-либо около 4 секунд. Затем он «ловит» и делает то, что когда-либо нажимал. Я подумал, что, возможно, это был мой отладчик, поэтому я пошел в папку с бинами и сразу же запустил приложение.

Я думал, что это была проблема с правами, поэтому я побежал как администратор и та же проблема. Я задавался вопросом, насколько плохо это будет на целевых компьютерах. Я скопировал папку bin на флешку, скопировал содержимое в Program Files и запустил его. Он отлично работал (ну до некоторой степени) Но проблемы не было. Я могу сразу выбрать любую задачу, которую я хочу, после появления диалогового окна.

Одна странная вещь заключается в том, что мой крючок клавиатуры перестает работать после 11-ти раз попытки переназначить его ... но это отдельный вопрос. Поэтому я подумал, что я помню, как кто-то говорил, используйте профайлер. Ну, у меня была визуальная студия, поэтому я включил ее, но я не могу сделать головы или хвосты возвращенных данных. Я бы опубликовал код, но я не знаю, что писать. Я даже зашел так далеко, используя System.Console.Write("."); вокруг области, я думал, была проблема, но это не проблема

protected override void theHook_RegisteredKeyPressed(System.Windows.Forms.Keys key) 
{ 
    if (TakeOver) 
    { 
     if (!Busy) 
     { 
      busy = true; 
      LibraryTrace.Start("NewKeyAssignment", key); 
      using (var window = new AssignmentTypePanel()) 
      { 
       presenter = new TaskPresenter(window, theList[key].Task); 
       window.Presenter = presenter; 
       //execution will not continue past here until window is closed 
       window.ShowDialog(); 
      } 
      theList[key] = new TaskKey(key, presenter.Task); 
      LibraryTrace.End("NewKeyAssignment", theList[key].Task.ToString()); 
      busy = false; 
     } 
    } 
    else 
    { 
     base.theHook_RegisteredKeyPressed(key); 
    } 
} 

Так я застрял. Я не могу понять, что напечатать, что спросить. Любые советы о том, как я могу найти корень этой проблемы?

+0

ну как догадка Я поставил все целевые платформы на x86, и проблема по-прежнему сохраняется ..:/В программе имеется объем памяти 7 МБ.(то есть TaskManager говорит, что он использует только 7mb), а сама программа - всего 1,1 Мб. странно, как все компоненты работают хорошо самими собой, но не хорошо вместе. –

ответ

1

У меня была аналогичная проблема с приложением, которое я разработал с использованием winforms. Операция «серверная» была быстрой, но при этом форма, показывающая результаты, заняла около 5 секунд.
После расследования выясняется, что winforms имеет некоторые известные проблемы с производительностью.
Есть несколько предложений по оптимизации (например, here или here и еще несколько других, которые я нашел в то время, но не могу найти их прямо сейчас).

Фактически, ни один из них не помог в моем случае.
В итоге я понял, что настоящее узкое место создает и отображает новую форму; то, что я закончил делать, было немного взломать.
Я разместил ВСЕ элементы управления на основной форме, некоторые из них скрыты, и имитировал изменение форм, скрыв некоторые элементы управления и отображая другие.
Это довольно уродливо, и не будет увеличиваться, но в моем случае очень хорошо работал.

+0

интересные мысли. Мне так странно, что у меня много проблем со всеми прохождением моих тестов. Если я открою одну форму, чтобы назначить ключ вручную (из единичного теста), он работает нормально. Я все время пытаюсь сузить проблему. Я злюсь на это. Я думаю, что буду работать над другим проектом в течение дня и посмотреть, поможет ли это. –

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