Я на самом деле склонен создавать очень небольшое количество адаптеров (обычно только по одному для каждого типа). Я никогда не пытался использовать их в качестве переменных стека (создавал их при необходимости), поэтому никогда не сталкивался с вашим вопросом, но понимаю вашу озабоченность.
Из того, что я знаю, сами по себе 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);
}
}
Я упустил управление транзакциями и обработку ошибок для краткости.