Производительность критическое приложение GUI (окна, Linux)

Как отметил @FelixKling, наиболее вероятным сценарием является то, что узлы, которые вы ищете, еще не существуют.

Однако современные методы разработки часто могут манипулировать элементами документа за пределами дерева документов либо с DocumentFragments, либо просто отсоединением / повторным подключением текущих элементов напрямую. Такие методы могут использоваться как часть шаблонов JavaScript или для предотвращения чрезмерных операций перерисовки / переплавки, в то время как элементы, о которых идет речь, сильно изменяются.

Аналогично, новая функциональность «Теневой DOM» развертывается в современных браузерах позволяет элементам быть частью документа, но не обрабатываться запросом document.getElementById и всеми его методами sibling (querySelector и т. д.). Это делается для инкапсуляции функциональных возможностей и, в частности, скрыть его.

Опять же, скорее всего, элемент, который вы ищете, просто (пока) в документе, и вы должны сделать, как предлагает Феликс , Тем не менее, вы также должны знать, что это все чаще является не единственной причиной того, что элемент может быть необоснованным (временно или постоянно).

5
задан Jarrod Dixon 22 March 2012 в 01:24
поделиться

12 ответов

Прежде всего я поместил бы некоторое время в испытание нескольких VB.NET к преобразователям C#. Вы в основном портируете синтаксис, и нет никакой причины сделать это вручную, если Вы не имеете к. Несомненно, Вам, возможно, придется очистить то, что выходит из преобразователя, но это - путь лучше, чем вручную преобразование.

Теперь, что касается Ваших вопросов:

1) имеет смысл делать GUI в winforms, но дорогой материал в собственном, неуправляемом C/C++?

Еще нет. Ожидайте, пока Вы не сделали преобразование и затем узнаете, где Вы на самом деле проводите свое время. Нет никакой причины вскочить в смешивание C/C++ с C#, пока Вы не узнаете, что это необходимо. Можно найти, что заскакивание в небезопасный C# достаточно. Даже это может быть ненужным. Вы, возможно, просто должны были бы оптимизировать алгоритмы. Узнайте то, что Ваши узкие места и затем решают, как зафиксировать их.

2) какие-либо рекомендации для хорошего кросс-платформенного набора работы с окнами, который соответствовал бы для сценария, описанного выше?

Я изучил бы моно наверняка. Это является действительно лучшим, можно сделать, если Вы идете с C#. Это в значительной степени или моно, или другой переписывает на другом языке, когда/если Вы перемещаетесь в Linux.

5
ответ дан 18 December 2019 в 07:58
поделиться

1) Не обязательно. Я думаю, что это было бы более корректно, чтобы сказать, что это - вероятно, стоящее написание Вашего кода бэкенда в C++, независимо от последствий производительности. Даже при том, что Вы не можете связать своих больших шишек на переключателе платформы, было бы благоразумно из Вас сделать подготовку к той возможности, так как типы управления имеют тенденцию передумать много без серьезного основания (или предупреждение); даже если они решают не переключиться теперь, который не означает, что они не решат переключить шесть месяцев с этого времени. Запись Вашей логики в C++ теперь, знание, что это - возможность, хотя более трудный, могут сделать Вашу жизнь значительно легче позже.

2) Едва ли. Существуют "решения" как wxWindows и GTK#, но часто они - багги, или трудный получить работу правильно, или они испытывают недостаток в чем-то важном на одной платформе или другом. Они также обычно блокируют Вас в наименьший общий знаменатель UI (т.е., общие средства управления хорошо работают, но можно забыть о когда-либо выполнении чего-то интересного - WPF, например - с ним). UIs легко записать, таким образом, я думаю, пишете ли Вы свою логику в чем-то, что это портативно, это должен быть тривиальный вопрос для сталкивания нескольких определенных для платформы UIs.

3
ответ дан 18 December 2019 в 07:58
поделиться

1) Преждевременная оптимизация является злой. Реализуйте свой "дорогой материал" в C# и посмотрите, необходимо ли осуществить рефакторинг его. Или, по крайней мере, настройте тест, который позволит Вам определять это.

2) Yowch. Кросс-платформенный UI. Я не выносил бы, "может" наполнить. Закрепите ласок; как можно возможно сделать проектные решения, не зная то, что Вы разрабатываете? Если Вы пойдете с чистой реализацией.NET, то они будут жаловаться, необходимо ли (как минимум) осуществить рефакторинг ее для работы в Моно? Если Вы создадите его в Java, то они будут раздражаться, что это выглядит ужасным как ад, и пользователи жалуются, что они не могут найти свой .exe файл среди всех тех .jars?

4
ответ дан 18 December 2019 в 07:58
поделиться

Нет, не имеет смысла делать "дорогой материал" в C/C++. Потенциал (и скорее всего незначительный) повышения производительности никогда не перевешивает Вашу производительность, являющуюся презренной, больной шуткой по сравнению с C#.В самом деле. Это даже не близко.

Прочитанный это (и все сообщения, на которые ссылаются в): http://blogs.msdn.com/ricom/archive/2005/05/10/416151.aspx

2
ответ дан 18 December 2019 в 07:58
поделиться

Для первого вопроса действительно трудно сказать, имело ли это смысл, поскольку это, вероятно, зависело бы от того, какую производительность необходимо получать. Я лично не видел медленных холмов в масштабе всей системы из-за GUI в правильно разработанном использовании графический интерфейсов пользователя WinForms, таким образом, я не вижу, почему это было бы, должен вызвать любые проблемы, и по всей вероятности это сделало бы Вашу жизнь легче в отношении GUI.

Что касается Вашего второго вопроса, если Вы собираетесь быть перемещением в другую платформу в какой-то момент - Вы хотите смотреть на библиотеки, которые были реализованы Моно (http://www.mono-project.com/Main_Page), это должно также удовлетворить большинство Ваших потребностей в отношении кросс-платформенной работы с окнами, поскольку это поддерживает WinForms и GTK#.

2
ответ дан 18 December 2019 в 07:58
поделиться

Вы могли бы хотеть изучить использование Моно. Это - версия с открытым исходным кодом.NET, которая работает на многих plateforms... Linux, Mac, Солярис, Windows, и т.д.

Теперь о кодировании Вашего дорогого материала в C/C++. Вот статья, которая делает очень хорошее задание, объясняя различия между работой C/C ++ & C#.

2
ответ дан 18 December 2019 в 07:58
поделиться

1) имеет смысл делать GUI в winforms, но дорогой материал в собственном, неуправляемом C/C++?

Скорее всего, нет. Если Вы не будете общаться с большим количеством другого собственного компонента C dlls или так на, C#, вероятно, будет между на 5% медленнее к на 5% быстрее, чем C++ (станд.:: представьте в виде строки действительно уничтожает Вас, если Вы используете его),

2) какие-либо рекомендации для хорошего кросс-платформенного набора работы с окнами, который соответствовал бы для сценария, описанного выше?

Если это будут просто некоторые простые формы с кнопками, то моно, вероятно, сможет выполнить их неизмененный. Это - поддержка.NET, WinForms довольно хорош в эти дни. Это однако, ужасный торец :-)

1
ответ дан 18 December 2019 в 07:58
поделиться

C/c ++ материал может закончить тем, что был хорошей идеей, но прямо сейчас YAGNI. То же с материалом Linux. Проигнорируйте его, Вы не собираетесь нуждаться в нем, пока Вам не нужен он. Сохраните это простым. Модульный тест ад из него, как Вы говорите. Получите работу кода и развейте дизайн оттуда.

0
ответ дан 18 December 2019 в 07:58
поделиться

Я мог бы неправильно понимать проблему, но если это - сетевая система контроля, почему это не записано как "специализированная" служба Windows?

VB.NET не должен быть намного медленнее, чем C#. Я не на 100% уверен, существуют ли какие-либо большие различия в сгенерированном IL-коде, но единственное преимущество (и допустимая причина переписать его в C#), я мог думать (за исключением того, что C# имеют более хороший синтаксис, и некоторые другие положительные герои) использование небезопасного блока кода, который мог ускорить вещи немного.

0
ответ дан 18 December 2019 в 07:58
поделиться

И снова, позвольте мне подчеркнуть, материал C++ veerrrryyyy дорогой. Имело бы смысл делать то, что я упомянул выше? (формы.NET, скрывающие тяжелый поднимающийся C++)

Как отмечено прежде, я лично не заметил медленных холмов в масштабе всей системы из-за WinForms в приложениях, записанных и в VB.NET и в C#. Однако, если приложение является действительно производительностью, интенсивной затем, Вы могли бы заметить, что небольшое замедляется, если Вы записали все в C# из-за него соответствовал в CIL (http://www.cl.cam.ac.uk/research/srg/han/hprls/orangepath/timestable-demo/). По сути, запись GUI на языке, таком как C#, вероятно, сделает ту часть разработки немного легче, который дал бы Вам больше времени для работы над критическими частями кода. Единственная уловка - 22 здесь, мог бы заметить некоторые медленные холмы из-за вызовов к коду C/C++ из кода C#; однако, это, вероятно, очень маловероятно.

1
ответ дан 18 December 2019 в 07:58
поделиться

gtk-резкий довольно хороший кросс-платформенный инструментарий.

Gtk# является Инструментарием Графического интерфейса пользователя для моно и .NET. Проект связывает gtk + инструментарий и различные библиотеки GNOME, включая полностью собственную графическую разработку приложений Gnome с помощью Моно и платформ разработки .NET.

0
ответ дан 18 December 2019 в 07:58
поделиться

Некоторое время назад у меня была похожая дилемма, когда я пытался найти лучший способ разработать инструмент H / W Testing на базе ПК (что, очевидно, означает «с параметрами пользовательского интерфейса»), который взаимодействует с встроенное оборудование (через интерфейс PCMCIA).

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

Например: Если тестер создает следующую последовательность тестирования:

    ] 1. Удаленно активировать H / W
    2. Дождитесь задержки 50 мс.
    3. Прочтите информацию о H / W.

задержка, упомянутая на шаге 2, не должна быть> 60 мс.


Я выбрал приложение C ++ WIN32 в качестве серверной части и VC ++ 2005 Winform (платформа .NET) для разработки пользовательского интерфейса. Подробная информация о том, как взаимодействовать между ними, доступна в msdn
Я разделил систему следующим образом:
В VC ++ .NET:

    1. Пользовательский интерфейс для получения полной информации о H / W (чтение через внутреннее приложение) и для управления H / W по запросу. (Кнопки, поле со списком и т. Д.)
    2. Пользовательский интерфейс для выполнения критических по времени тестовых последовательностей (как указано в приведенном выше примере).
    3. Сбор этой информации и построение потока (File-stream) в линейно-временном формате (то есть в точном порядке шагов, в которых он должен выполняться).
    4. Механизм запуска и дрожания рук (путем перенаправления стандартного ввода и стандартного вывода) с внутренним приложением WIN32. Общими ресурсами будут файловые потоки.

В C ++ WIN32:

    1. Интерпретация входящего файлового потока.
    2. Взаимодействие с H / W.
    3. Сбор информации с H / W и помещение ее в выходной файл-поток.
    4. Индикация завершения теста в пользовательском интерфейсе (через перенаправленный стандартный вывод).

Вся система запущена и работает. Вроде довольно стабильно. (Без указанного выше отклонения по времени).
Обратите внимание, что используемый нами тестовый компьютер предназначен исключительно для целей тестирования H / W (на нем был только пользовательский интерфейс, без автоматических обновлений, сканирования на вирусы и т. Д.).

0
ответ дан 18 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: