Если речь идет о производительности, мои мысли (в порядке возрастания воздействия):
temp = new List<T>(thisChunkSize)
new T[thisChunkSize]
BlockCopy
(или CopyTo
, который использует это для внутреннего использования), а не копируете отдельные элементы один за другим 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
.
Расположение, которое генерирует Graphviz, основано на глобальной структуре - любое единственное дополнение может существенно изменить вывод (если Вы не используете зафиксированные координаты, в этом случае Вы, вероятно, не задали бы этот вопрос). В основном, если Вы хотите автоматическое размещение элементов, необходимо принять одно из этих решений:
Извините я не могу помочь с Вашим вопросом, но возможно это помогает объяснить, почему то, что Вы ищете, не может просто существовать (или хорошо работать).
Преодолеть некоторые проблемы при использовании graphviz (descibed Tom). Мы устанавливаем visualizer мировые провода для совпадения с graphviz мировыми проводами.
затем. принятие каждого визуального элемента имеет уникальный идентификатор, создайте график с помощью этих элементов. произведите график как текст. перестройте все на основе выходного парсинга.?
--
Michael