2011-07-13 2 views
1

Я уже некоторое время разрабатываю небольшие приложения для баз данных в Visual Studio C#. В настоящее время я использую VS 2010. До недавнего времени все приложения запускались на том же компьютере, на котором была сохранена база данных, и все прошло отлично. Недавно мне пришлось начать разработку некоторых приложений, которые будут запускаться на отдельном компьютере, который находится в одной локальной сети.Очень медленные запросы в локальной сети в приложениях C#

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

Ниже у меня есть фрагмент кода (слегка измененный, чтобы иметь больше смысла). Он использует базу данных Firebird, хотя я использую MSSQL и Sybase Advantage, а также с теми же результатами.

  FbConnection fdbConnect = new FbConnection(); 
      fdbConnect.ConnectionString = Program.ConnectionString; 
      fdbConnect.Open(); 
      FbCommand fcmdQuery = new FbCommand(); 
      fcmdQuery.Connection = fdbConnect; 
      fcmdQuery.CommandText = "select dadda.name, yadda.address, yadda.phone1 from SOMETABLE left join yadda on dadda    where yadda.pk = dadda.yaddapk"; 
      FbDataAdapter fdaDataSet = new FbDataAdapter(fcmdQuery); 
      DataSet dsReturn = new DataSet(); 
      fdaDataSet.Fill(dsReturn); 
      fdbConnect.Close(); 
      DataGridView1.DataSource = dsReturn.Tables[0]; 

Есть ли у кого-нибудь предложения о том, как я могу ускорить это?

+1

Сколько стоит «большой объем данных»? Вы определили узкое место (сеть, БД, что-то еще)? – Oded

+0

Также, какие базы данных? Такие бэкэнды, как Access (.MDB), как правило, медленны при доступе по сети. – CodingGorilla

+0

@ Кодирование Горилла: Жар-птица ... ТАК упомянула об этом. – Reniuz

ответ

1

Вы можете вернуть ненужные данные в этот оператор SELECT *. Это может быть расточительным в сетевом трафике и снизить производительность вашего приложения. Об этом много статей и о том, как вы должны явно указывать свои столбцы. Вот one in particular.

+0

Хорошая информация, но я на самом деле явно нацелен на конкретные столбцы в моем реальном коде, я просто написал быстрый поддельный SQL и не думал о выбранных * сбивающих людей. Благодаря! – thebuder

+0

@ thebuder: Не забудьте дать точную информацию при задании вашего вопроса :) –

0

Вы можете уменьшить объем ответа, ограничивая столбцы:

Вместо

select * from SOMETABLE 

Попробуйте

select a,b,c from SOMETABLE 

получать только нужные данные.

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

+0

Я отредактировал мое сообщение.Я действительно извлекаю только те столбцы и данные, которые мне нужны. – thebuder

+0

В этом случае, как и другие, серверная страница подкачки, чтобы ограничить размер вашего набора данных, вероятно, является плотным висячим фруктом –

0

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

+0

. Я собираюсь проверить это и сообщит вам об этом. Благодаря! – thebuder

+0

Я только что вернулся к работе над этим. Я занимаюсь поиском на стороне сервера и испытываю некоторые проблемы с моими исследованиями. Первая проблема заключается в том, что я использую WinForms, и кажется, что все результаты поиска дают результаты ASP, которые, похоже, не слишком хорошо переносятся. Вторая проблема заключается в том, что шея бутылки фактически заполняет инструкцию SQL, поэтому все, что я делаю с gridview, я не вижу в качестве помощи. Любое предложение о том, где искать дополнительную информацию на странице подкачки сервера с winforms? Я свободно признаю, что даже не знаю, где включить подкачку на стороне сервера, на источнике данных или что-то в базе данных. – thebuder

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