Прежде всего, если вы хотите какой-либо производительности, вы должны выполнять как можно меньше работы в критической секции. Я бы начал с изменения следующего:
std::vector toDie;
std::vector toLive;
| |
на
std::vector> toDie;
std::vector> toLive;
Затем, в своем критическом разделе, вы можете просто сделать:
toDie.push_back(std::move(myToDie));
toLive.push_back(std::move(myToLive));
Возможно вектор vector не симпатичен, но это предотвратит глубокое копирование внутри CS, что потребует ненужного времени.
[Обновить] ИМХО, нет смысла использовать многопоточность, если вы используете несмежные структуры данных, по крайней мере, не таким образом. Дело в том, что вы будете тратить большую часть своего времени на ожидание промахов кэша, потому что это то, что делают ассоциативные контейнеры, и мало выполняет реальную работу. Я не знаю, как работает эта игра. Такое ощущение, что если бы мне пришлось что-то делать с многочисленными обновлениями и рендерингом, я бы сделал обновления как можно быстрее в «главном» потоке, и у меня был бы другой (отдельный) поток для рендера. После этого вы можете просто отображать результаты визуализации после каждого «обновления» и выполнять другое обновление во время рендеринга.
Кроме того, я определенно не эксперт в хешировании, но hash
похоже на хэширование при высоких столкновениях. Конечно, вы можете попробовать что-то еще, например, то, что предлагается здесь
Даже если то, что является и не является хорошей практикой, очень субъективно, я должен сказать, что попытка получить доступ ко всему из элемента управления из его базового класса - плохая практика. Базовый класс должен только содержать код, который относится к всем классам, которые его унаследуют, и как вы знаете, что каждая страница, которую вы напишите в будущем, будет иметь этот элемент управления?
Лучшим способом решения вашей проблемы (который, как я предполагаю, будет иметь код для вашего главного меню только в одном месте) было бы написать UserControl
, который вы добавляете на каждую страницу. Если вам нужно сделать что-то конкретное с этим элементом управления, вы можете сделать это в CodeBehind UC
.