В игре, над которой я работал, я создал систему, в которой игра опрашивает определенный файл 'ItemDatabase', чтобы получить информацию о себе на основе заданного идентификационного номера. Идентификационный номер представляет точку в базе данных, в которой хранится информация, касающаяся конкретного элемента. Представление каждого элемента в базе данных состояло из 162 байтов. Код для системы был похож на следующее:
// Retrieves the information about an 'Item' object given the ID. The
// 'BinaryReader' object contains a file stream to the 'ItemDatabase' file.
public Item(ushort ID, BinaryReader itemReader)
{
// Since each 'Item' object is represented by 162 bytes of information in the
// database, skip 162 bytes per ID skipped.
itemReader.BaseStream.Seek(162 * ID, SeekOrigin.Begin);
// Retrieve the name of this 'Item' from the database.
this.itemName = itemReader.ReadChars(20).ToString();
}
Обычно в этой системе не было бы ничего особенно плохого, поскольку она запрашивает нужные данные и инициализирует их правильными переменными. Однако этот процесс должен происходить во время игры, и, основываясь на моих исследованиях эффективности метода «Поиск», эта техника не будет достаточно быстрой для включения в игру. Итак, мой вопрос: как правильно вести список, который связывает идентификационный номер с информацией, к которой можно быстро получить доступ?