2013-12-26 2 views
1

Я пытаюсь создать простую структуру readonly, подобную структуре datatable, я буду использовать ее для генерации SQL-команд, и я ищу максимальную производительность, вот что я придумал, идея состоит в том, чтобы генерировать Rows[] от IList<T>.Создание простой структуры readonly, аналогичной DataTable

class Column 
    { 
     public string Name { get; private set; } 
     public string TableName { get; private set; } 
     public bool IsPrimaryKey { get; private set; } 
     public SqlDbType SqlType { get; private set; } 
     public string SqlTypeString { get { return SqlType.ToString(); } } 
     //etc.. 
     public Column(PropertyInfo propertyInfo){//init everything} 
    } 



class Cell 
    { 
     public Column Column { get; private set; } 
     public object Value { get; private set; } 

     public Cell(object Value,Column Column) 
     { 
      this.Column = Column; 
      this.Value = Value; 
     } 
    } 

class Row 
    { 
     public object[] Cells { get; private set; } 
     public Row(Cell[] Cells) 
     { 
      this.Cells = new Cell[Cells.Count()]; 
      for (int i = 0; i < Cells.Count(); i++) 
      { 
       this.Cells[i] = Cells[i]; 
      } 
     } 
    } 

каждая ячейка содержит ссылку на его объект столбца, который я не уверен, если его правильно, мне было интересно, если уронить ссылку на столбец из ячейки и используя порядок объекта, чтобы получить ссылку столбец лучший вариант, другими словами, я хочу, чтобы микро оптимизировать его с его простой структуры.

+3

Вам не нужен класс 'Cell' вообще. Вы можете посмотреть на похожий код, который я написал, с поддержкой сильной печати, на странице https://github.com/ShomreiTorah/Libraries/blob/master/ShomreiTorah.Singularity/Row.cs – SLaks

+2

Посмотрите на микро-ORM, такие как Dapper, которые уже все это для вас. – SLaks

+0

Есть несколько очевидных проблем с тем, что вы здесь делаете, и я уверен в ряде проблем, которые я не вижу, потому что я не полностью понимаю цель этой структуры данных. Какую проблему вы пытаетесь решить с этим? Вы пробовали существующие рамки, чтобы узнать, могут ли они решить одну и ту же проблему лучше? – StriplingWarrior

ответ

3

Я хочу, чтобы микро оптимизировать его с его простой структуры.

Это не обоснованная причина для микро-оптимизации этой структуры.

Ваша классная структура, в ее нынешнем виде, еще не верна. Сначала сосредоточьтесь на правильности , тогда вы можете работать над оптимизацией.

Например, возвращая тот же самый object[], который вы используете внутренне, это не «структура readonly», о которой вы заявляете. Кто-то может модифицировать элементы этого массива и испортить вещи по-королевски.

С помощью того, что вы сказали, вы пытаетесь сделать это с помощью этой структуры (анализируя деревья выражений для создания SQL-запросов и т. Д.), Есть вероятность, что любая оптимизация, которую вы делаете на этом уровне, даже не будет заметна. Но если вы хотите начать оптимизацию, правильным местом для начала является удаление вызовов на .Count() на ваших массивах. Вместо этого используйте .Length.

Но, как я уже упоминал в комментариях к вашему вопросу, я настоятельно рекомендую сначала попробовать существующие рамки. Более умные люди, чем вы и я, вкладывали в них много времени и сил, и они, вероятно, будут делать больше, чем мы можем. :-)

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