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

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

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

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

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

Кстати, я слышал, что в некоторых средах частая установка try/catch сильно снижает производительность, даже если не выбрасывать исключения. Как с этим обстоят дела в Каше?
...
Рейтинг: 0 / 0
21.04.2016, 11:52
    #39221054
eduard93
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в Cache
Блок А.Н.Кстати, я слышал, что в некоторых средах частая установка try/catch сильно снижает производительность, даже если не выбрасывать исключения. Как с этим обстоят дела в Каше?
Хорошо обстоят. Если исключение не возникает, то падения производительности практически нет. Тест .
...
Рейтинг: 0 / 0
22.04.2016, 10:46
    #39222143
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в Cache
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
22.04.2016, 13:09
    #39222357
П.С.М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в Cache
Хм...
без ошибки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
25.04.2016, 04:33
    #39223490
Шваров Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в Cache
П.С.М.Хм...
без ошибки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
25.04.2016, 09:22
    #39223557
П.С.М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в Cache
Шваров Евгений,
Код 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
25.04.2016, 10:28
    #39223628
Шваров Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в Cache
П.С.М.Шваров Евгений,
Код 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
25.04.2016, 10:40
    #39223641
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в Cache
П.С.М.Код servit привел, я лишь запустил на исполнение ( см. последнее сообщение от servit ) :)Там точнее можно увидеть автора кода: 19092161 Шваров ЕвгенийОго. Т.е. получается try catch серьезно замедляет исполнение. Не хотите тут опубликовать код и исследование?Как-то не состыкуются "серьёзно замедляет" и "падения практически нет":eduard93Блок А.Н.Кстати, я слышал, что в некоторых средах частая установка try/catch сильно снижает производительность, даже если не выбрасывать исключения. Как с этим обстоят дела в Каше?Хорошо обстоят. Если исключение не возникает, то падения производительности практически нет. Тест .
...
Рейтинг: 0 / 0
25.04.2016, 10:54
    #39223664
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в Cache
Шваров ЕвгенийТ.е. интересно, если просто вставить 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
25.04.2016, 11:16
    #39223683
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Try catch в Cache
Влияние "прогрева" становится особенно очевидным, если сделать

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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Try catch в Cache / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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