Страница: 1 | 2 |
|
Вопрос: Оптимизация, морской бой, List<T>
|
Добавлено: 09.05.12 21:04
|
|
Номер ответа: 16 Автор ответа: Artyom
Разработчик
Вопросов: 130 Ответов: 6602
|
Профиль | | #16
|
Добавлено: 13.05.12 12:47
|
По поводу "архитектуры".
Нужно исходить не из того, как хранить данные, а из того, как будет выполняться работа с ними. Проанализировать какие операции будут выполняться чаще всего, и опимизировать структур хранения для того чтоб в этих случаях код работал быстрее всего.
Не исходить из того что "У меня все хранится в List'ах, в одной ячейке хранится то что находится в другой" и т.п.
Я лично разбираться с твоей задачей не буду, тем более ответа на вопрос "как будут использоваться данные" нет. Могу посоветовать только что-то общее
Нужно абстрагироваться от способа хранения. Код верхнего уровня не должен знать что все лежит в List'ах, Hashset'ах и Dictionary.
Никаких Dictionaty<Cell, HashSet<ictioanry<string, object>>>. Все должно быть представлено удобным интерфейсом. Когда ты захочешь поправить одну из структур, тебе не нужно будет переписывать весь код.
Там где это уместно, используй прямую адресацию.
Учти что если планируется общий доступ к данным из разных потоков, возникнет много проблем. Прийдется использовать потокобезопасные контейнеры (они появились в 4.0) или синхронизацию. Или все вместе. Если куда-то на обработку передашеь список объектов, может быть уместно сделать его копию, чтоб другие потоки могли в это же время исходный список модифицировать.
Ответить
|
Номер ответа: 17 Автор ответа: Programmer
Вопросов: 71 Ответов: 246
|
Профиль | | #17
|
Добавлено: 13.05.12 14:24
|
Приятно наконец-то увидеть развернутый ответ.
По поводу оптимизации, разобрался уже.
По поводу архитектуры.
ответа на вопрос "как будут использоваться данные" нет А где вопрос?
Как я уже сказал данные из ячеек передаются нескольким удаленным обработчикам через сокеты. Удаленный компьютер производит обработку данных и в зависимости от результата возвращает отчет.
Или ты спрашивал о том, как я буду использовать те данные которые ты напишешь? Понятно, что буду использовать в своем проекте
Никаких Dictionaty<Cell, HashSet< ictioanry<string, object>>>. Все должно быть представлено удобным интерфейсом. Когда ты захочешь поправить одну из структур, тебе не нужно будет переписывать весь код. Так и делаю
Где это не ухудшает производительность, компоненты не знают о внутреннем устройстве "соседей". Да и делать один обработчик для List<ictinary<,<,>>> слишком громоздко, так что у меня отдельный класс для каждой ячейки.
Для потокобезопасности использую ReaderWriterLockSlim. Вообще, это не та часть программы которую стоит серьезно параллелить. Большую часть времени она будет заниматься I/O
Ответить
|
Страница: 1 | 2 |
Поиск по форуму