powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Try catch в Cache
16 сообщений из 16, страница 1 из 1
Try catch в Cache
    #39219533
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одно горячее обсуждение сегодня: пост по try catch в Developer Community.
...
Рейтинг: 0 / 0
Try catch в Cache
    #39219710
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь идет о регистрации явных ошибок, для которых как минимум известно место их возникновения, а значит при желании можно понять контекст и воспроизвести ошибку, что практически равноценно ее исправлению. По мне так, не так важно в деталях, как регистрировать эту ошибку, главное, чтобы это было удобно разработчикам, которые занимаются поддержкой продукта.

Вот если бы это помогало при разборе ситуаций, когда ошибка не возникает явно, но программа отрабатывает неверно, причем это выявляется хорошо если спустя неделю по неверным или испорченным данным, при этом неизвестен контекст выполнения, дата ошибки и иногда даже версия программы ;-)
...
Рейтинг: 0 / 0
Try catch в Cache
    #39220053
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,
на уровне синтаксиса ЯП ловить не падения кода, а ошибки прикладной логики, реализуемой разработчиком? Если я, конечно, правильно понял Вашу мысль. Интересно, каким образом такое можно сделать?
...
Рейтинг: 0 / 0
Try catch в Cache
    #39220066
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyБлок А.Н.,
на уровне синтаксиса ЯП ловить не падения кода, а ошибки прикладной логики, реализуемой разработчиком? Если я, конечно, правильно понял Вашу мысль. Интересно, каким образом такое можно сделать?
И я бы хотел такому научиться...
...
Рейтинг: 0 / 0
Try catch в Cache
    #39220096
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKBEvLaUyБлок А.Н.,
на уровне синтаксиса ЯП ловить не падения кода, а ошибки прикладной логики, реализуемой разработчиком? Если я, конечно, правильно понял Вашу мысль. Интересно, каким образом такое можно сделать?И я бы хотел такому научиться... 17945666
...
Рейтинг: 0 / 0
Try catch в Cache
    #39220668
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Найти ошибку / сбой программы, а вот косяк программиста - наврятли.

Потому и существуют патчи в Windows, так как регулярно находят косяки в программах.
Расчёт простой - одна ошибка на 100'000 это как пить дать.

Опечатку никак не найти (если вместо ">" по ошибке написал "<"). Программе то всё равно. Условие есть условие.
...
Рейтинг: 0 / 0
Try catch в Cache
    #39220755
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyБлок А.Н.,
на уровне синтаксиса ЯП ловить не падения кода, а ошибки прикладной логики, реализуемой разработчиком? Если я, конечно, правильно понял Вашу мысль. Интересно, каким образом такое можно сделать?Я говорю, что в том обсуждении люди предлагают методы поиска блестящей монетки под фонарем, при том, что на мой взгляд, гораздо больше проблем вызывает проблема поиска черной кошки ночью в темной комнате при том, что кошка еще не сидит на месте.

Рецепты я не хочу предлагать, тут ничего особо оригинального нет. Можно, например, записывать все вызовы и их результаты, чтобы при выявлении ошибки через неделю попробовать понять контекст, можно, например, пытаться анализировать ошибки прикладной логики и записывать их в лог, каноничным вариантом, наверное, является использование юнит-тестов. Но это все скучно и каждый раз индивидуально, а try/catch поставил и вроде бы проблема решена, можно пообсуждать :-)

Кстати, я слышал, что в некоторых средах частая установка try/catch сильно снижает производительность, даже если не выбрасывать исключения. Как с этим обстоят дела в Каше?
...
Рейтинг: 0 / 0
Try catch в Cache
    #39221054
eduard93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Кстати, я слышал, что в некоторых средах частая установка try/catch сильно снижает производительность, даже если не выбрасывать исключения. Как с этим обстоят дела в Каше?
Хорошо обстоят. Если исключение не возникает, то падения производительности практически нет. Тест .
...
Рейтинг: 0 / 0
Try catch в Cache
    #39222143
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eduard93Хорошо обстоят. Если исключение не возникает, то падения производительности практически нет. Тест .
Пример кода с "ошибками"
Код: plaintext
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.
Class Utils.Time [ Abstract, Final ]
{

/// <example>
/// d ##class(Utils.Time).Test()
/// </example>
ClassMethod Test()
{
  w #
  f count=1,1,1,2,3,5,10,100,1000,10000 {
    s start = $ZH
    f i=1:1:count s tSC = ..NoTry()
    s timeNoTry = $ZH - start

    s start = $ZH
    f i=1:1:count s tSC = ..Try()
    s timeTry = $ZH - start

    w "Итераций: ", count,!,
      "Время ""No Try"":", ?17, timeNoTry,!,
      "Время ""Try"":", ?17, timeTry,!,
      """Try"" заняло ", $FN(100*timeTry/timeNoTry,"",2), "% времени ""No Try""",!!
  }
}

ClassMethod NoTry() As %Status [ Internal, Private ]
{
  s tSC = $$$OK, $ZT = "Trap"
  s a = 1
  s b = $R(1000000)
  ;s c = 5/0
Exit
  q tSC
Trap
  s $ZT = ""
  s tSC = $$$ERROR($$$CacheError,$ZE)
  k %objlasterror
  s $ZE = "", $EC = ""
  g Exit
}

ClassMethod Try() As %Status [ Internal, Private ]
{
  s tSC = $$$OK
  try {
    s a = 1
    s b = $R(1000000)
    ;s c = 5/0
  } catch ex {
    ;s tSC = $$$ERROR($$$CacheError, $ZE)
    ;s tSC = $$$ERROR($$$CacheError, ex.AsSystemError())
    s tSC = ex.AsStatus()
    k %objlasterror
    s $ZE = "", $EC = ""
  }
  q tSC
}

}
...
Рейтинг: 0 / 0
Try catch в Cache
    #39222357
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм...
без ошибкиCache for UNIX (SUSE Enterprise Server for x86-64) 2010.2.8 (Build 1104U) Sat Feb 11 2012 13:08:18 ESTИтераций: 1
Время "No Try": .000017
Время "Try": .000003
"Try" заняло 17.65% времени "No Try"

Итераций: 1
Время "No Try": .000003
Время "Try": .000001
"Try" заняло 33.33% времени "No Try"

Итераций: 1
Время "No Try": .000003
Время "Try": .000001
"Try" заняло 33.33% времени "No Try"

Итераций: 2
Время "No Try": .000002
Время "Try": .000002
"Try" заняло 100.00% времени "No Try"

Итераций: 3
Время "No Try": .000004
Время "Try": .000002
"Try" заняло 50.00% времени "No Try"

Итераций: 5
Время "No Try": .000004
Время "Try": .000004
"Try" заняло 100.00% времени "No Try"

Итераций: 10
Время "No Try": .000008
Время "Try": .000006
"Try" заняло 75.00% времени "No Try"

Итераций: 100
Время "No Try": .000063
Время "Try": .00005
"Try" заняло 79.37% времени "No Try"

Итераций: 1000
Время "No Try": .000586
Время "Try": .00049
"Try" заняло 83.62% времени "No Try"

Итераций: 10000
Время "No Try": .006036
Время "Try": .004976
"Try" заняло 82.44% времени "No Try"
с ошибкойCache for UNIX (SUSE Enterprise Server for x86-64) 2010.2.8 (Build 1104U) Sat Feb 11 2012 13:08:18 ESTИтераций: 1
Время "No Try": .000215
Время "Try": .000259
"Try" заняло 120.47% времени "No Try"

Итераций: 1
Время "No Try": .000074
Время "Try": .000082
"Try" заняло 110.81% времени "No Try"

Итераций: 1
Время "No Try": .000069
Время "Try": .00008
"Try" заняло 115.94% времени "No Try"

Итераций: 2
Время "No Try": .000122
Время "Try": .000207
"Try" заняло 169.67% времени "No Try"

Итераций: 3
Время "No Try": .000226
Время "Try": .000288
"Try" заняло 127.43% времени "No Try"

Итераций: 5
Время "No Try": .000335
Время "Try": .000409
"Try" заняло 122.09% времени "No Try"

Итераций: 10
Время "No Try": .000591
Время "Try": .000714
"Try" заняло 120.81% времени "No Try"

Итераций: 100
Время "No Try": .007276
Время "Try": .00769
"Try" заняло 105.69% времени "No Try"

Итераций: 1000
Время "No Try": .058086
Время "Try": .082014
"Try" заняло 141.19% времени "No Try"

Итераций: 10000
Время "No Try": .488961
Время "Try": .499278
"Try" заняло 102.11% времени "No Try"
...
Рейтинг: 0 / 0
Try catch в Cache
    #39223490
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.Хм...
без ошибкиCache for UNIX (SUSE Enterprise Server for x86-64) 2010.2.8 (Build 1104U) Sat Feb 11 2012 13:08:18 ESTИтераций: 1
Время "No Try": .000017
Время "Try": .000003
"Try" заняло 17.65% времени "No Try"

Итераций: 1
Время "No Try": .000003
Время "Try": .000001
"Try" заняло 33.33% времени "No Try"

Итераций: 1
Время "No Try": .000003
Время "Try": .000001
"Try" заняло 33.33% времени "No Try"

Итераций: 2
Время "No Try": .000002
Время "Try": .000002
"Try" заняло 100.00% времени "No Try"

Итераций: 3
Время "No Try": .000004
Время "Try": .000002
"Try" заняло 50.00% времени "No Try"

Итераций: 5
Время "No Try": .000004
Время "Try": .000004
"Try" заняло 100.00% времени "No Try"

Итераций: 10
Время "No Try": .000008
Время "Try": .000006
"Try" заняло 75.00% времени "No Try"

Итераций: 100
Время "No Try": .000063
Время "Try": .00005
"Try" заняло 79.37% времени "No Try"

Итераций: 1000
Время "No Try": .000586
Время "Try": .00049
"Try" заняло 83.62% времени "No Try"

Итераций: 10000
Время "No Try": .006036
Время "Try": .004976
"Try" заняло 82.44% времени "No Try"
с ошибкойCache for UNIX (SUSE Enterprise Server for x86-64) 2010.2.8 (Build 1104U) Sat Feb 11 2012 13:08:18 ESTИтераций: 1
Время "No Try": .000215
Время "Try": .000259
"Try" заняло 120.47% времени "No Try"

Итераций: 1
Время "No Try": .000074
Время "Try": .000082
"Try" заняло 110.81% времени "No Try"

Итераций: 1
Время "No Try": .000069
Время "Try": .00008
"Try" заняло 115.94% времени "No Try"

Итераций: 2
Время "No Try": .000122
Время "Try": .000207
"Try" заняло 169.67% времени "No Try"

Итераций: 3
Время "No Try": .000226
Время "Try": .000288
"Try" заняло 127.43% времени "No Try"

Итераций: 5
Время "No Try": .000335
Время "Try": .000409
"Try" заняло 122.09% времени "No Try"

Итераций: 10
Время "No Try": .000591
Время "Try": .000714
"Try" заняло 120.81% времени "No Try"

Итераций: 100
Время "No Try": .007276
Время "Try": .00769
"Try" заняло 105.69% времени "No Try"

Итераций: 1000
Время "No Try": .058086
Время "Try": .082014
"Try" заняло 141.19% времени "No Try"

Итераций: 10000
Время "No Try": .488961
Время "Try": .499278
"Try" заняло 102.11% времени "No Try"

Ого. Т.е. получается try catch серьезно замедляет исполнение. Не хотите тут опубликовать код и исследование?
А на какой версии проверялось?
...
Рейтинг: 0 / 0
Try catch в Cache
    #39223557
Фотография П.С.М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров Евгений,
Код servit привел, я лишь запустил на исполнение (см. последнее сообщение от servit) :)
Да и версия, вроде как, тоже указана:
Cache for UNIX (SUSE Enterprise Server for x86-64) 2010.2.8 (Build 1104U) Sat Feb 11 2012 13:08:18 EST
Ну и замедление происходит в случае ошибки, а в случае отсутствия ошибок, наоборот, работает быстрее чем код с "классическим" обработчиком )))
...
Рейтинг: 0 / 0
Try catch в Cache
    #39223628
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.Шваров Евгений,
Код servit привел, я лишь запустил на исполнение (см. последнее сообщение от servit) :)
Да и версия, вроде как, тоже указана:
Cache for UNIX (SUSE Enterprise Server for x86-64) 2010.2.8 (Build 1104U) Sat Feb 11 2012 13:08:18 EST
Ну и замедление происходит в случае ошибки, а в случае отсутствия ошибок, наоборот, работает быстрее чем код с "классическим" обработчиком )))

Что-то я "подиагонали совсем" прочитал код спросонья - извините)
А такое проверяли? - один и тот же код, без ошибок - с try catch и без try catch (и без "классического" обработчика)?
Т.е. интересно, если просто вставить try catch блок, дает ли это замедление кода внутри блока?
...
Рейтинг: 0 / 0
Try catch в Cache
    #39223641
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П.С.М.Код servit привел, я лишь запустил на исполнение ( см. последнее сообщение от servit ) :)Там точнее можно увидеть автора кода: 19092161 Шваров ЕвгенийОго. Т.е. получается try catch серьезно замедляет исполнение. Не хотите тут опубликовать код и исследование?Как-то не состыкуются "серьёзно замедляет" и "падения практически нет":eduard93Блок А.Н.Кстати, я слышал, что в некоторых средах частая установка try/catch сильно снижает производительность, даже если не выбрасывать исключения. Как с этим обстоят дела в Каше?Хорошо обстоят. Если исключение не возникает, то падения производительности практически нет. Тест .
...
Рейтинг: 0 / 0
Try catch в Cache
    #39223664
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров ЕвгенийТ.е. интересно, если просто вставить try catch блок, дает ли это замедление кода внутри блока?Нет.
Cache for Windows (x86-64) 2016.2 (Build 636U) Wed Apr 13 2016 20:58:35 EDT
Код: plaintext
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.
Class Utils.Time2 [ Abstract, Final ]
{

/// <example>
/// d ##class(Utils.Time2).Test()
/// </example>
ClassMethod Test()
{
  w #
  f count=1,1,1,2,3,5,10,100,1000,10000 {
    s start = $ZH
    f i=1:1:count s tSC = ..NoTry()
    s timeNoTry = $ZH - start

    s start = $ZH
    f i=1:1:count s tSC = ..Try()
    s timeTry = $ZH - start

    w "Итераций: ",count,!,
      "Время ""No Try"":",?17,timeNoTry,!,
      "Время ""Try"":",?17,timeTry,!,
      """Try"" заняло ",$FN(100*timeTry/timeNoTry,"",2),"% времени ""No Try""",!!
  }
}

ClassMethod NoTry() As %Status [ Internal, Private ]
{
  s a = 1
  s b = $R(1000000)
  q $$$OK
}

ClassMethod Try() As %Status [ Internal, Private ]
{
  try {
    s a = 1
    s b = $R(1000000)
  } catch {}
  q $$$OK
}

}
Код: plaintext
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.
Итераций: 1
Время "No Try":  .000013
Время "Try":     .000003
"Try" заняло 23.08% времени "No Try"
 
Итераций: 1
Время "No Try":  .000003
Время "Try":     .000002
"Try" заняло 66.67% времени "No Try"
 
Итераций: 1
Время "No Try":  .000003
Время "Try":     .000001
"Try" заняло 33.33% времени "No Try"
 
Итераций: 2
Время "No Try":  .000003
Время "Try":     .000002
"Try" заняло 66.67% времени "No Try"
 
Итераций: 3
Время "No Try":  .000004
Время "Try":     .000003
"Try" заняло 75.00% времени "No Try"
 
Итераций: 5
Время "No Try":  .000004
Время "Try":     .000003
"Try" заняло 75.00% времени "No Try"
 
Итераций: 10
Время "No Try":  .000008
Время "Try":     .000007
"Try" заняло 87.50% времени "No Try"
 
Итераций: 100
Время "No Try":  .000062
Время "Try":     .000066
"Try" заняло 106.45% времени "No Try"
 
Итераций: 1000
Время "No Try":  .000633
Время "Try":     .000631
"Try" заняло 99.68% времени "No Try"
 
Итераций: 10000
Время "No Try":  .006223
Время "Try":     .006126
"Try" заняло 98.44% времени "No Try"
Нужно ещё учитывать прогрев кэша, например если поменять местами очерёдность вызовов ..Try()/..NoTry().
Где-то здесь этот вопрос уже обсуждался.
...
Рейтинг: 0 / 0
Try catch в Cache
    #39223683
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Влияние "прогрева" становится особенно очевидным, если сделать

s start = $ZH
f i=1:1:count s tSC = ..NoTry()
s timeNoTry = $ZH - start

s start = $ZH
f i=1:1:count s tSC = ..NoTry()
s timeTry = $ZH - start

или

s start = $ZH
f i=1:1:count s tSC = ..Try()
s timeNoTry = $ZH - start

s start = $ZH
f i=1:1:count s tSC = ..Try()
s timeTry = $ZH - start
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Try catch в Cache
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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