Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сильно тормозит клиент на некоторых машинах / 18 сообщений из 18, страница 1 из 1
07.11.2013, 05:57
    #38455476
АлекейК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
Всем привет. Ситуация такая. Net 4.0. В приложении есть код, который заполняет DataTable. На своем компе и на виртуальной машине пробовал, отрабатывает менее одной секунды, глазом не заметно. У клиента висит 3-1,5 минуты, в зависимости от того, на каком компьютере запускается. Антивирусы, говорит, отключал, но все равно тормоза. Компы у него мощнее. Ес-но, что скорость работы запроса к базе сверяли - одинаковая. Тормоз именно на чтении DataReader'a и заполнении DataTable. У себя не могу смоделировать, все отрабатывает почти мгновенно. Набор возвращаемых данных мизерный ~2000 строк. СУБД MS SQL. В какую сторону покопать? Будут идеи?
...
Рейтинг: 0 / 0
07.11.2013, 10:52
    #38455669
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
чем мерили? интересно как вы узнал что именно DataReader. Да и код заполнения бы поглядеть.
...
Рейтинг: 0 / 0
07.11.2013, 11:33
    #38455744
АлекейК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
авторЧем мерили
Код: plaintext
1.
2.
3.
4.
5.
declare @t1 datetime
declare @t2 datetime
set @t1 = getdate()
Exec dbo.GetKontragentDepend 6
set @t2 = getdate()
select datediff(ms, @t1, @t2) as time_execute


Время выполнения этого запроса примерно одинаковое и равно ~0.5 сек

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
while(reader.Read())
{
       row = table.NewRow();

       for (int g = 0; g < ar.Length/2; g++)
           row[ar[1, g]] = reader[ar[0, g]];

        table.Rows.Add(row);
}

Где ar, это int [,] ar, соотносит индекс столбца в ридере с индексом столбца в таблице.

Этот цикл у клиента тормозит, а у меня нет, причем на разных машинах с его стороны и с моей. Сначала думал, что не тот экзешник запускается, но потом уже на форме пометки сделал, тот.
...
Рейтинг: 0 / 0
07.11.2013, 11:35
    #38455748
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
АлекейК, там сложная хранимка или просто селект?
...
Рейтинг: 0 / 0
07.11.2013, 11:42
    #38455758
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
...
Рейтинг: 0 / 0
07.11.2013, 11:47
    #38455774
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
зачем такую сложную логику по заполнению DataTable? не проще ли ?или есть какая то особенность ?
Код: c#
1.
2.
3.
var da = new SqlDataAdapter(cmd);
var tbl = new DataTable();
da.Fill(tbl);


п.с. а в коде ставили замеры? поставьте stopwatch и в логи выводите что происходит.
...
Рейтинг: 0 / 0
07.11.2013, 12:21
    #38455837
АлекейК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
авторАлекейК, там сложная хранимка или просто селект?

В хранимке просто несколько селектов, каждый из которых имеет 1 inner join, то есть возвращается несколько наборов данных. Но я выше уже упоминал, время выполнения запроса одинаковое.

авторне ваш случай?
Почитаю

авторп.с. а в коде ставили замеры? поставьте stopwatch и в логи выводите что происходит.
Где поставить? У меня проблем нет, доступа к клиенту не имею.

авторзачем такую сложную логику по заполнению DataTable? не проще ли ?или есть какая то особенность ?
Да есть, нюанс. В конечном, счете Fill использует то же самый DataReader
...
Рейтинг: 0 / 0
07.11.2013, 12:33
    #38455866
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
АлекейКНо я выше уже упоминал, время выполнения запроса одинаковое.
Красота в глазах смотрящего ;)
...
Рейтинг: 0 / 0
07.11.2013, 12:55
    #38455916
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
АлекейКВ хранимке просто несколько селектов, каждый из которых имеет 1 inner join, то есть возвращается несколько наборов данных. Но я выше уже упоминал, время выполнения запроса одинаковое.
Ну так грузи сразу в датасет.

Код: c#
1.
2.
3.
4.
5.
var dataset = new DataSet();
using (var adapter = new SqlDataAdapter(command))
{
    adapter.Fill(dataset);
}
...
Рейтинг: 0 / 0
07.11.2013, 13:13
    #38455971
АлекейК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
Не получиться как надо, только если часть логики переписать. И потом адаптер все равно использует datareader, рефлектором смотрел, ничего нового там нет.

Раньше была строка - это был тормоз

row[redaer.GetName(i)] = reader[i];

Убрал, сделал обращение по индексу, все стало летать, но только у меня.
row[ar[1, g]] = reader[ar[0, g]];
...
Рейтинг: 0 / 0
07.11.2013, 13:26
    #38456024
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
АлекейКНе получиться как надо, только если часть логики переписать.
Ну переписывай. Зато будет как надо.

АлекейКИ потом адаптер все равно использует datareader, рефлектором смотрел, ничего нового там нет.
Уберется твой гавнокод, который кроме проблем ничего не обещает. Задача решается в 3 строчки.

АлекейКУбрал, сделал обращение по индексу, все стало летать, но только у меня.
А уберешь вообще этот мрак, глядишь и у всех заработает.
...
Рейтинг: 0 / 0
07.11.2013, 13:37
    #38456064
АлекейК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
>МСУ
Если сказать нечего, ветку спамом не забивайте
...
Рейтинг: 0 / 0
07.11.2013, 16:32
    #38456491
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
АлекейКЕсли сказать нечего, ветку спамом не забивайте
Я тебе уже сказал, что делать. Если это "спам", то можешь убить себя об стену или отравиться ядом.
...
Рейтинг: 0 / 0
07.11.2013, 16:39
    #38456515
ВМоисеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
>АлекейК, сегодня, 11:33 [15089655]
> ... for (int g = 0; g < ar.Length/2; g++)
row[ar[1, g]] = reader[ar[0, g]];

А если так:
for (int g = 0; g < ar.Length/2; g++) {
int i,j;
i=ar[1, g];
j=ar[0, g];
row[i] = reader[j];
}

В любом случае, найдёте причину, причину, отпишитесь. Интересно.

С уважением, Владимир.
...
Рейтинг: 0 / 0
07.11.2013, 17:15
    #38456605
Dmitry Gurianov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
ну не могут 2000 строк на клиенте подгружаться куда-либо 3 минуты, если они все пришли :)
...
Рейтинг: 0 / 0
08.11.2013, 05:52
    #38457298
АлекейК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
авторЯ тебе уже сказал, что делать. Если это "спам", то можешь убить себя об стену или отравиться ядом.

Я же вам говорил, что адаптер использует ридер для загрузки данных. Не доходит? Декомпиль и посмотри, коль такой умный. Изначально данные загружались через адаптер. Быстрее от этого не работало.

авторВ любом случае, найдёте причину, причину, отпишитесь. Интересно.

Без разницы, как загружать данные в
...
Рейтинг: 0 / 0
08.11.2013, 06:00
    #38457299
АлекейК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
DataSet. В цикле создавать строки, присваивать им значения не посредственно полям, делать ImportRow, заполнять адаптером. Работает везде мгновенно, кроме как у клиента. Скину ему сегодня новый экзешник, который все подробно залогирует, тогда может и понятно станет.

авторну не могут 2000 строк на клиенте подгружаться куда-либо 3 минуты, если они все пришли :)

Я думал сначала, что это шутка такая.
...
Рейтинг: 0 / 0
08.11.2013, 09:41
    #38457392
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сильно тормозит клиент на некоторых машинах
АлекейКЯ же вам говорил, что адаптер использует ридер для загрузки данных. Не доходит?
Ты глупый, что ли? Ридер может использовать кто угодно и где угодно. Я тебе десятый раз повторяю, убери свой гавнокод и проверь работу на адаптере. Не доходит что ли?

АлекейКДекомпиль и посмотри, коль такой умный. Изначально данные загружались через адаптер. Быстрее от этого не работало.
Тут гадалок нет, чтобы понять как и что у тебя работало. Что мешало изначально сказать, что уже пробовал адаптер? А то начинаешь спорить и метать слюну, а потом признаешься, что уже пробовал этот способ.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сильно тормозит клиент на некоторых машинах / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]