2010-12-03 2 views
4

У меня есть довольно большой Hashtable, заполненный только статическими данными.Можно ли заполнить таблицу поиска во время компиляции? C#

Это означает, что когда программа запустится, у меня будет длинный метод инициализации/конструктора, который будет выполнять многие методы hashtable.Add() (yuk) или де-сериализоваться из файла ресурсов, который был создан пользователем во время кодирования.

Есть ли какой-либо атрибут или другой способ, который я мог бы использовать для включения этих данных во время компиляции?

+0

Возможно, вы можете уточнить, является ли его количество кода, который вы пишете, или скорость кода, о которой вы беспокоитесь? – MerickOWA 2010-12-03 18:31:21

+0

Спасибо, MerickOWA. Это и то, и другое. Чтобы написать пользовательскую программу, просто получить сериализованные данные, ну, а не изящно. Заполнение записей по одному во время выполнения, меньше кодировки, но добавляет к времени загрузки. – MandoMando 2010-12-03 18:51:27

+0

Я не думаю, что вы найдете маленький/быстрый/элегантный все в одном решении, если только его язык программирования не предназначен именно для этой цели. – MerickOWA 2010-12-03 19:04:54

ответ

2

В зависимости от того, что у вас есть в таблице. Вы всегда можете использовать файл ресурсов.

http://msdn.microsoft.com/en-us/library/ekyft91f.aspx

+0

Я уже говорил о файле ресурсов в вопросе. Вы знаете способ автоматического создания данных о ресурсах? – MandoMando 2010-12-03 18:52:47

0

Путь вы можете справиться с этим, если вы не хотите, чтобы загрузить Hashtable во время выполнения, чтобы хранить данные в базе данных, а затем выполнить поиск либо с запросами или LINQ. Есть несколько вариантов, SQLLite, SqlServerCE, если вы просто хотите что-то ориентированное на рабочем столе. Вы также можете использовать что-то более надежное, как SqlServer или MySql, в зависимости от сферы применения вашего приложения.

0

Если вы хотите экземпляр HashTable во время выполнения, вы должны выделить и заполнить этот экземпляр HashTable во время выполнения.

Если вы хотите принять решение со значением, вы можете написать метод.

1

Theres нет способа концептуально настроить объект во время компиляции. Объект должен быть выделен/построен .NET runtime, а затем каким-то образом заполнен данными.

Насколько вы это делаете, вы можете попытаться выполнить сериализацию Hashtable в двоичном файле после того, как на нем были сделаны медленные добавления вызовов.

Тогда в вашем основном приложении вы можете просто сериализовать его обратно, когда ему это нужно.

Это, надеюсь, даст вам более быструю инициализацию вашего HashTable, а не многих .Add-вызовов.

3

Если ваши данные строго статичны (или достаточно статичны, чтобы вы могли жестко закодировать их в своей программе), вы можете просто поместить все свои значения в оператор switch. Нельзя сказать, хорошо это или нет, но это не кажется хуже, чем загрузка HashTable. С положительной стороны, инициализация «хэш-таблица» не стал строго компилировать продолжительность работы:

public int Lookup(int key) 
{ 
    switch (key) 
    { 
    case K1: return V1; 
    case K2: return V2; 
    case K3: return V3; 
    case K4: return V4; 
    case K5: return V5; 
    case K6: return V6; 
    case K7: return V7; 
    default: return V_WHOOPS; 
    } 
} 

Если число значений велико, вы можете написать скрипт для генерации кода, а не вводить его вручную ,

Смежные вопросы