При использовании автоматически сгенерированных адаптеров таблиц, каков предлагаемый способ иметь дело с повторной реализацией? - PullRequest
0 голосов
/ 26 января 2010

Я использую штуковины набора данных .xsd (которые мне не нравятся) для автоматической генерации классов TableAdapter для некоторого внутреннего кода. Я на самом деле не использовал их раньше, склоняясь к тому, чтобы отдавать предпочтение ручным командам и хранимым процедурам, когда это возможно (по различным причинам, связанным со скоростью: эти xsds играют в ад с динамическими таблицами и действительно большим количеством столбцов), и я нахожусь в создании экземпляра TableAdapter в большое количество моих методов, поэтому мой вопрос таков:

Будет ли автоматически сгенерированный код автоматически оптимизировать себя, чтобы в классе не создавался полный класс адаптера, и вместо этого делиться некоторыми статическими данными (например, информацией о соединении), и если нет, то было бы лучше иметь некоторые своего рода поставщик одноэлементных / статических классов, который может предоставить мне доступ к их методам, когда это необходимо, без дополнительных затрат на создание нового адаптера каждый раз, когда я хочу получить некоторую информацию?

Cheers, Ed

Ответы [ 2 ]

1 голос
/ 09 февраля 2010

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

Извините, вы не нашли мой ответ полезным.

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

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

1 голос
/ 09 февраля 2010

Я на самом деле склонен создавать очень небольшое количество адаптеров (обычно только по одному для каждого типа). Я никогда не пытался использовать их в качестве переменных стека (создавал их при необходимости), поэтому никогда не сталкивался с вашим вопросом, но понимаю вашу озабоченность.

Из того, что я знаю, сами по себе aqdapters могут быть довольно тяжелыми в инстансинге, но настоящий убийца - это связь. Что я делаю, так это отмечаю модификатор Соединения адаптера как Public в конструкторе .xsd, чтобы я мог назначить свойству то, что мне нужно, чтобы использовать его, и поддерживать жесткий контроль открытия и закрытия соединений:

void Load() {
  using (SqlConnection conn = ...) {
    conn.Open();
    invoicesAdapter.Connection = conn;
    customersAdapter.Connection = conn;
    invoicesAdapter.Fill(dataSet.Invoices);
    customersAdapter.Fill(dataSet.Customers);
  }
}

void Save() {
  using (SqlConnection conn = ...) {
    conn.Open();
    invoicesAdapter.Connection = conn;
    customersAdapter.Connection = conn;
    invoicesAdapter.Update(dataSet);
    customersAdapater.Update(dataSet);
  }
}

Я упустил управление транзакциями и обработку ошибок для краткости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...