powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SqlCommand Select и Update в циклеTimeout expired.
25 сообщений из 43, страница 1 из 2
SqlCommand Select и Update в циклеTimeout expired.
    #39724319
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу скажу, я не знаток в шарпе, есть тестовый вариант кода
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
      SqlConnection con = new SqlConnection(TConst.ConnectionString);
      SqlCommand qUpdate = new SqlCommand(
              "update Ref_PersonPhoto " +
              "set RPF_Preview=@Preview " +
              "where RPF_ID=@ID"
      , con);
      qUpdate.CommandType = CommandType.Text;
      //qUpdate.CommandTimeout = 900;
      SqlCommand query = new SqlCommand(
        "select top 3 RPF_Photo,RPF_ID from Ref_PersonPhoto " +
        "where RPF_Photo is not null and RPF_Preview is null and len(RPF_Photo)>0" +
        TTools.IIF(PersonID=="","", " and RPF_PersonID="+ PersonID)
      , con);
      query.CommandType = CommandType.Text;
      query.CommandTimeout = 9000;
      SqlDataReader dr = null;
      int pSize = 100;
      bool rep = false;
      try {
        con.Open();
        dr = query.ExecuteReader();
        rep = dr.HasRows;
        while (dr.Read()) {
          byte[] b = null;
          b = (byte[])dr["RPF_Photo"];
          //b.Length
          Image<Rgba32> image = Image.Load(b, out IImageFormat mimeType);
          decimal coef = TTools.IIF(
              image.Width > image.Height,
              pSize/ Convert.ToDecimal(image.Width),
              pSize / Convert.ToDecimal(image.Height)
          );
          image.Mutate(ctx => ctx.Resize(Convert.ToInt32(image.Width* coef), Convert.ToInt32(image.Height* coef)));
          var memoryStream = new MemoryStream();
          image.Save(memoryStream, mimeType);
          memoryStream.Flush();
          qUpdate.Parameters.Clear();
          //qUpdate.Parameters["ID"].Value       = dr["RPF_ID"].ToString();
          //qUpdate.Parameters["Preview"].Value  = memoryStream.ToArray();

          qUpdate.Parameters.AddWithValue("@ID", dr["RPF_ID"].ToString());
          qUpdate.Parameters.AddWithValue("@Preview", memoryStream.ToArray());
          qUpdate.ExecuteNonQuery();
          //qUpdate.Dispose();

          memoryStream.Close();
          memoryStream.Dispose();
          image.Dispose();
        }
      } catch (Exception e) {
        TTools.Trace(e.Message);

      }
      dr.Close();
      query.Dispose();
      qUpdate.Dispose();
      con.Close();
      con.Dispose();


выгребаются фотки из базы и создается на их основе превью. Жопа в том, что команда qUpdate.ExecuteNonQuery(); вываливается по таймауту с сообщением
авторTimeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding
При этом, если я в селекте ограничу выборку Top 1. то все проходит "на ура". При этом таблица точно не лочится, так как я имею к ней доступ и могу свободно работать во время выполнtния update
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724329
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ther,

Удерживать открытое соединение с базой слишком долго, это плохая идея в случае c web.
Как вариант, можно проводить работу с изображениями обдельно от работы с базой, затем передать список изменений для update.
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724330
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ther
Код: c#
1.
//qUpdate.CommandTimeout = 900;

а с какой целью закомментирована строчка?
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724335
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
therПри этом, если я в селекте ограничу выборку Top 1.копайте дальше.
Сколько записей? Миллион?
Время таймаута реальное? Время апдейта необходимое?
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724357
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
therПри этом таблица точно не лочится, так как я имею к ней доступ и могу свободно работать во время выполнtния update
Уверены? Что значит работать?

SELECT накладывает shared lock, что позволяет другим транзакциям читать из таблицы, но не изменять.
Так что работать Вы можете, а вот UPDATE не пройдёт.

Смотрите какого типа блокировки и на какие объекты (строки, таблицы, индексы) наложены.
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724359
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ther,

для простоты сначала считайте в словарь Dictionary<string, byte[]> данные из RPF_ID, RPF_Photo.
Закройте reader (dr = query.ExecuteReader()).
А после этого в цикле делайте Resize и UPDATE.

А вообще предлагаю Вам готовить preview сразу при загрузке фотографии. И разом вставлять и в RPF_Photo, и RPF_Preview.
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724364
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно легко проверить - поставить в селекте хинт WITH (NOLOCK)
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724365
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Сколько записей? Миллион?Петя как всегда не читатель. Обновление идет только для одной записи
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724366
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мухдля простоты сначала считайте в словарь Dictionary<string, byte[]>А если там несколько сотен фоток? У него память лопнет. Да и не дождется перекачки на клиента.

Можно просто прочитать все ID-шники картинок в List, потом по одной дергать картинки из базы, закрывая ридер.
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724372
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пасиб на идеи. Фотки тянутся из другой базы в полном размере (база->база), там не было необходимости их сжимать.
Дмитрий Мух
Пасиб, попробую через дикт
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724373
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДмитрий Мухдля простоты сначала считайте в словарь Dictionary<string, byte[]>А если там несколько сотен фоток? У него память лопнет.
В коде я вижу select top 3

И я же пишу, сначала, для простоты. Чтобы он убедился в блокировках.
Так ведь не поверит

Да и с чего память на нескольких сотнях лопнет?

Фотка 2-3 MB, несколько сотен - это 400-600 MB.
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724374
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProPetro123Сколько записей? Миллион?Петя как всегда не читатель. Обновление идет только для одной записиторопыга, для одной записи у него работает.
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724376
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухВ коде я вижу select top 3 экспериментальное, по всей видимостиtherесли я в селекте ограничу выборку Top 1
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724377
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123для одной записи у него работает.ты не почитал код. Падает на апдейте, а про одну запись он говорит при выборке. Мух, скорее всего, прав, но, думаю, самое простое поставить NOLOCK и вряд ли придется менять что-то еще
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724378
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
therФотки тянутся из другой базы в полном размере (база->база), там не было необходимости их сжимать.
Дмитрий Мух
Пасиб, попробую через дикт
В той базе нет необходимости, а в этой есть.
Я вам предлагаю перед тем, как вставить в Эту базу и выполнить Resize.
И вставить в таблицу Ref_PersonPhoto разом и RPF_Photo, и RPF_Preview.

Это сложно?
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724380
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в цикле буду выбирать по 10-100 штук(еще не решил) загонять в дикт и обрабатывать
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724381
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proсамое простое поставить NOLOCK и вряд ли придется менять что-то еще
Вариант конечно. Но чем он аукнется?
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724383
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, сначала попробую NOLOCK , если не выйдет, гляну на дикт. Спасибо еще раз
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724384
ther
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
по идее ничем, это не критичная таблица и ее никто, кроме сервака не обрабатывает. Усер туда не лезет
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724385
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProПадает на апдейте, а про одну запись он говорит при выборке.это не отменяет знание анализов у врача) - сколько висит апдейт и нужен ли промежуточный коммит для базы.
Но ты мешаешь ТСу отвечать на простые вопросы мемберов.
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724387
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий МухВариант конечно. Но чем он аукнется?По идее ничем - цикл ведь идет только вперед, он не будет дергать повторно только что измененную запись. А если ошибка вылезет, то она вылезет сразу.

Код: sql
1.
SELECT TOP 10 ... WHERE RPF_Preview IS NULL 

тоже вариант, никаких словарей, в общем-то и не надо
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724388
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proтоже вариант, никаких словарей, в общем-то и не надоой, ну то есть - надо для этих 10-100-1000
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724393
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Никаких блокировок там нет. А нужен ли пакетный режим решается индивидуально.
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724399
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Никаких блокировок там нетSelect без Nolock - это уже блокировка. Тебе уже сказалиДмитрий МухSELECT накладывает shared lockа, ну да, для тебя авторитетов не существует.
...
Рейтинг: 0 / 0
SqlCommand Select и Update в циклеTimeout expired.
    #39724408
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProSelect без Nolock - это уже блокировка. Тебе уже сказаливернулись ко временам access?
Табличной блокировке. Смешно.
Удачи!
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SqlCommand Select и Update в циклеTimeout expired.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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