@dlangru

Страница 44 из 719
Oleg
28.07.2016
13:48:36
или ты хочешь чтобы после закрытия твоей программы существовала возможность оставить соединение открытым?)))

Dmitry
28.07.2016
13:49:00
я хотел чтобы после завершения метода соединение оставалось открытым.

Oleg
28.07.2016
13:49:07
какого метода?

Dmitry
28.07.2016
13:49:22
чтобы при новом запросе его не пеероткрывать. getIMGsMetadataFromDB()

Google
Oleg
28.07.2016
13:49:37
вот тут я реально не знаю

возможно идеологически правильно открывать каждый раз соединение (при закрытии например транзакция происходит)

Dmitry
28.07.2016
13:50:10
просто вот на сайте сидит 100 человек и шлют запросы. Что получается соединение будет 100 раз в секунду открываться, закрываться?

Oleg
28.07.2016
13:50:18
а возможно оно открывается один раз на жизнь программы

Макс
28.07.2016
13:50:23
чтобы при новом запросе его не пеероткрывать. getIMGsMetadataFromDB()
так как это statement, а не всеобъемлющий connection, я предполагаю, что авторы библиотеки не ожидают, что ты его будешь переиспользовать. тут спрашивай у авторов библиотеки

Dmitry
28.07.2016
13:50:40
так я же: scope(exit) conn.close(); вызываю, значит оно закрывается

Oleg
28.07.2016
13:50:53
ты про пример из readme?)

это просто пример использования, это не "боевой" код

понятное дело там main закончился и всё закончилось

в реальном коде нужно разбираться, какие объекты подразумевается что живут всегда, а какие постоянно создаются и уничтожаются

Dmitry
28.07.2016
13:56:17
ок пасибо, щас еще повтыкаю

Макс
28.07.2016
14:04:32
просто вот на сайте сидит 100 человек и шлют запросы. Что получается соединение будет 100 раз в секунду открываться, закрываться?
Соединение нужно, наверное, одно на поток. А вот всякие стэйтменты, под которыми действительно библиотека, возможно, скрывает транзакции — да, будут по одному на каждый чих.

Dmitry
28.07.2016
14:07:05
так, а можно написать так? ~this() { scope(exit) conn.close(); } ?

Google
Dmitry
28.07.2016
14:07:18
Олег, щас еще твой пример посмотрю

Макс
28.07.2016
14:09:35
здесь не нужен scope(exit)

просто conn.close()

Dmitry
28.07.2016
14:09:57
а точно

Макс
28.07.2016
14:09:59
деструктор — это и есть эдакий scope(exit), только при удалении объекта

Dmitry
28.07.2016
14:11:04
и тогда: scope(exit) stmt.close(); оставлю в методе т.к. по логике именно он в каждом методе должен финализироваться?

Oleg
28.07.2016
14:11:37
создать только не забудь)

Dmitry
28.07.2016
14:13:04
предлагаешь в каждом методе его отдельно создавать?

Макс
28.07.2016
14:13:57
да. ведь каждый раз ты в прошлый раз его уже удалил, так?

ну, закрыл. сделал непригодным к использованию

Dmitry
28.07.2016
14:16:47
а как быть если создаание соединение должно быть видно в методе финилизации:

получается надо посмотреть тип conn и объявить его как поле?

Макс
28.07.2016
14:20:50
да

Dmitry
29.07.2016
07:09:50
Так, в итоге вот этот пример правильный? http://forum.dlang.org/post/wsadfomctuprdvmuwqxx@forum.dlang.org

как я понял по теме единственный разумный вариант это пул подключений делать

К теме про сборку мусора. В каких случаях надо вручную вызывать деструктор: ` Foo foo = new Foo; destroy(foo); ` Если его не вывать память так и не освободится?

Макс
29.07.2016
10:46:27
При завершении программы всё равно высвободится. Или когда GC захочет поработать, всё равно высвободится, я так понимаю. А самому нужно вроде если сам чувствуешь, что слишком много создаёшь объектов и точно знаешь, когда их удалять. Например, в каком-то большом цикле если приходится на каждом шаге что-то создавать, то почему бы и не удалять за собой – через тот же scope(exit), например.

Но я не спец, я просто ляпнул)

Eto
29.07.2016
12:43:24
К теме про сборку мусора. В каких случаях надо вручную вызывать деструктор: ` Foo foo = new Foo; destroy(foo); ` Если его не вывать память так и не освободится?
«Use the destroy function to finalize an object by calling its destructor. The memory of the object is not immediately deallocated, instead the GC will collect the memory of the object at an undetermined point after finalization: ...»

Google
Eto
29.07.2016
12:44:07
destroy только вызывает деструктор. Оно пригодится, когда нужно высвободить ресурсы занимаемые объектом.

Dmitry
29.07.2016
12:44:41
точнее не вызывает, а помечаетобъект к уничтожению?

и дальше его ГК допнет?

Eto
29.07.2016
12:45:21
Да, я привёл цитату.

Dmitry
29.07.2016
12:46:35
нет, я к тому что что будет если объект к уничтожению самому не пометить

когда метод завершится разве GC не грохнет все что внутри него было?

Eto
29.07.2016
12:49:37
Я уверен, что GC вызовет финализаторы для всего содержимого.

Oleg
29.07.2016
15:54:02
вызовет

вот только когда не всегда понятно

Dmitry
29.07.2016
16:43:55
А тут получается гарантированно при запуске?

Oleg
29.07.2016
18:01:58
запуске чего?

destroy только деструктор вызывает

Oleg
29.07.2016
18:02:39
раньше было ключевое слово delete, работало как в С++

Dmitry
29.07.2016
18:04:23
при запуске GC

Oleg
29.07.2016
18:09:33
gc работает всегда

он выделяет память

он принимает решение что-то почистить

Dmitry
29.07.2016
18:10:01
в чистит память в какой момент? По таймеру?

Oleg
29.07.2016
18:10:14
нет, по какому-то своду правил

типа памяти мало

Google
Oleg
29.07.2016
18:10:56
в процентном соотношении

динамика выделения памяти тоже вроде влияет, тут точно не знаю

кто с vibe.d плотно работает? можете объяснить почему при обновлении страницы дважды отрабатывается функция, отвечающая на запрос?

если создать шаблонное приложение и просто вписать логирование в функцию hello оно выведется 2 раза

Pavel
31.07.2016
15:40:46
Не наблюдал такого

Dmitry
31.07.2016
16:06:11
а логгируешь чем?

можешь код показать?

Oleg
31.07.2016
17:53:11
Тот логгер что в vibe

Прям просто копирую с static this

Admin
ERROR: S client not available

Oleg
31.07.2016
18:49:59
вот добрался до компа import vibe.d; shared static this() { auto settings = new HTTPServerSettings; settings.port = 8080; settings.bindAddresses = ["::1", "127.0.0.1"]; listenHTTP(settings, &hello); logInfo("Please open http://127.0.0.1:8080/ in your browser."); } void hello(HTTPServerRequest req, HTTPServerResponse res) { logInfo("hello"); res.writeBody("Hello, World!"); } при обновлении страницы hello выводится 2 раза

29 и 30-aplha.4 одинаково

Dmitry
31.07.2016
18:50:50
а если счетчик какой нить поставить int i

Oleg
31.07.2016
18:50:59
инкрементируется 2 раза

вообще я это обнаружил когда в базу писать при запросе стал

по две записи на одно обращение

Макс
31.07.2016
18:51:20
в порядке бреда: а обращение точно происходит одно? а если консольным httpie/wget/чем-то проверить, то как будет? а то вдруг это браузер и его плагины балуются лишними запросами

Google
Макс
31.07.2016
18:52:49
=))

Oleg
31.07.2016
18:52:51
теряю хватку))

спасибо за подсказку

0x9d8e
31.07.2016
18:54:03
По идее браузер не долже бы такой ерунды для post-запросов допускать

Dmitry
31.07.2016
18:55:01
да??

а из-за чего это? Плагин какой-то или что?

Макс
31.07.2016
18:56:58
вот тоже интересно, и хочется верить, что плагин. я бы начал отключать сначала всякие Pocket и прочие сохранятели копий/миниатюрок, у них могут быть причины делать запрос

Oleg
31.07.2016
18:56:59
плагины только Google Docs, Google Docs Offline, Google Sheets, Google Slides

Макс
31.07.2016
18:57:11
или HTTPSEverywhere

хром?

Oleg
31.07.2016
18:57:26
да

кстати при самом первом запросе (после перезапуска сервера) запрос 1

Макс
31.07.2016
18:58:03
не знаю зачем я спросил, всё равно не помогу)

Oleg
31.07.2016
18:58:11
далее если переоткрывать страницу 2 запроса

0x9d8e
31.07.2016
18:58:30
Хром может предварительно обращаться чтобы попытаться подгрузить заранее, чтобы заголовок в подсказки подтянуть. Но тогда он дожен бы второй раз уже полученный результат отдать, но...

*показать а не отдать

Oleg
31.07.2016
18:59:25
надо будет потом проверить как он себя ведёт с post запросами...

не должен так делать

а то что я в get писал в базу это просто ради "попробовать писать в базу"... так не надо делать, как я понял)

Pavel
31.07.2016
20:39:02
проверять http запросы надо только через curl ! Так будет соблюдена однозначность и повторяемость. Навороченные браузеры хрен знает как там кешируют, буферизируют, работают с редиректами и всякой плагинной магией.

Dmitry
01.08.2016
04:05:46
Видимо я сталкивался с этим. Такое было во всех браузерах. Тогда я решил это глюк в коде

А не приводит ли такой код к лишней аллокации памяти? jsonfromstruct = jsonfromstruct.replaceLast(`,`,``);

Страница 44 из 719