Простой динамический дисплей графика для C++

Если речь идет о производительности, мои мысли (в порядке возрастания воздействия):

  • правильное изменение размеров списков при их создании сохранит много работы, т.е. выяснить размеры выходных партий до того, как вы начнете копировать, то есть temp = new List<T>(thisChunkSize)
  • работа с массивами будет более эффективной, чем работа со списками - new T[thisChunkSize]
  • особенно если вы используете BlockCopy (или CopyTo, который использует это для внутреннего использования), а не копируете отдельные элементы один за другим
  • после того, как вы рассчитали смещения для каждого из фрагментов, отдельные блок-копии могут вероятно, будет выполняться параллельно, но я бы не предполагал, что это будет быстрее - пропускная способность памяти будет ограничивающим фактором на этом этапе
  • , но окончательное исправление Ultimate : don ' • копировать данные вообще , но вместо этого просто создать диапазоны поверх существующих данных; например, если использовать массивы, ArraySegment<T> поможет; если вы открыты для использования более новых функций .NET, это идеально подходит для Memory<T> / Span<T> - создание диапазонов памяти / диапазона по существующему массиву является по сути бесплатным и мгновенным - т.е. возьмите T[] и верните [ 119] или аналогичный.

Даже если вы не можете переключиться на ArraySegment<T> / Memory<T> и т. Д., Возвращаете что-то , например, , которое еще можно использовать - то есть List<ListSegment<T>>, где ListSegment<T> - это что-то вроде:

readonly struct ListSegment<T> { // like ArraySegment<T>, but for List<T>
    public List<T> List {get;}
    public int Offset {get;}
    public int Count {get;}
}

и ваш код будет работать с ListSegment<T> путем соответствующей обработки Offset и Count.

5
задан amit 21 January 2009 в 03:23
поделиться

2 ответа

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

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

Извините я не могу помочь с Вашим вопросом, но возможно это помогает объяснить, почему то, что Вы ищете, не может просто существовать (или хорошо работать).

4
ответ дан 15 December 2019 в 01:12
поделиться

Преодолеть некоторые проблемы при использовании graphviz (descibed Tom). Мы устанавливаем visualizer мировые провода для совпадения с graphviz мировыми проводами.

затем. принятие каждого визуального элемента имеет уникальный идентификатор, создайте график с помощью этих элементов. произведите график как текст. перестройте все на основе выходного парсинга.?

--

Michael

0
ответ дан 15 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

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