Очень медленно выполняющиеся запросы по локальной сети в приложениях c # - PullRequest
1 голос
/ 13 июля 2011

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

Достаточно просто, но я сталкиваюсь с проблемой при выполнении запросов для заполнения элементов управления, таких как сетка или даже поле со списком. Проблема в том, что на каждый элемент управления может потребоваться 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];

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

Ответы [ 3 ]

1 голос
/ 13 июля 2011

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

0 голосов
/ 13 июля 2011

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

0 голосов
/ 13 июля 2011

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

Вместо

select * from SOMETABLE

Попробуйте

 select a,b,c from SOMETABLE

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

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

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