
Daniel
14.08.2018
14:04:01
да

Roman
14.08.2018
14:04:43
не делайте так

Google

Vadim
14.08.2018
14:09:31
+

Roman
14.08.2018
14:11:48

Combot
14.08.2018
14:11:48
Roman Sharkov (0) увеличил репутацию Daniel Podolsky (4)

Roman
14.08.2018
14:16:49

Vladimir
14.08.2018
14:41:31
rtmp - труп
rtmp в первую очередь подходит мне из-за nginx-rtmp-module
А так да...

Человек
14.08.2018
15:22:12
Здравствуйте, как мне оптимизировать производительность Go кода? ОС: шиндовс 8.1 x32-64. Суть работы: приложение подключается последовательно к 30 БД (локальных БД), копирует данные в temp файл (ибо эти БД могут использовать другие приложения), считывает данные из temp файла и записывает считанные дынные с БД в текстовые файд "query.txt". Приметка: в БД может быть от 10 строк до 7 тысяч строк. На все это уходит секунд 6-7 на мощном ноутбуке, а если ещё и запускать на более слабых пк/ноутбуках то может занять более 25 сек. Но я то знаю что может быть результат намного лучше, но вот только не знаю как сделать так чтоб результат был лучше, извините за тафтологию. Код: https://pastebin.com/sHYDevDK

Subbotin
14.08.2018
15:44:44
А потом выпилил open из цикла и вытащил его наружу

Человек
14.08.2018
15:48:34

Subbotin
14.08.2018
15:49:24
Я как раз намекал на обойтись без файлов

Человек
14.08.2018
15:50:21

Subbotin
14.08.2018
15:51:15

Человек
14.08.2018
15:52:02

Google

Человек
14.08.2018
15:52:12
Он же 1 раз создается, по идее цикл тут не влияет ни на что
Ибо там стоит флаг os.O_APPEND

Zver
14.08.2018
15:54:57

Человек
14.08.2018
15:55:29

Zver
14.08.2018
15:56:05
Открытие файла за цикл вынести надо.

Человек
14.08.2018
16:12:15

Lesha
14.08.2018
16:19:33

Человек
14.08.2018
16:21:55

Lesha
14.08.2018
16:24:15
да, профайлер очень поможет.

Subbotin
14.08.2018
16:24:20
Можно ещё вместо sprintf делать fprintf, но это экономия на спичках

Lesha
14.08.2018
16:24:45
Можно писать не каждую строчку, а накапливать буффер и вконце его сливать в файл

Subbotin
14.08.2018
16:25:29

Lesha
14.08.2018
16:26:05
Типа того:
var buffer bytes.Buffer
for i := 0; i < 1000; i++ {
buffer.WriteString("a\n")
}
buffer.String() // Write to file

Subbotin
14.08.2018
16:26:18
Кстати что за БД?

Человек
14.08.2018
16:26:37
Ну это все как я понял максимум что сократит время на 1-2 сек максимум ?

Lesha
14.08.2018
16:27:10
ну это при условии, что тормозит именно запись в файл.
Можно запустить без записи в файл и посмотреть время. Возможно, из БД медленно забираешь

Человек
14.08.2018
16:29:02

Google

Человек
14.08.2018
16:29:49
Поэтому походу можно сказать я достиг предела

Subbotin
14.08.2018
16:34:23
Это очень странно. Выбрать из sqlite 10k строк это быстро

Alexander
14.08.2018
16:34:31
а нет ли проблемы в Next()? никогда не работал с бд из го, если убрать все из цикла, сильно быстрее станет? либо убрать пока только запись, то есть найдите для начала узкое место, прежде чем оптимизировать что-то

Zver
14.08.2018
16:34:32

Alexander
14.08.2018
16:34:41
а так - получается просто гадание какое-то

Zver
14.08.2018
16:35:33
Ну так это самым первым надо было делать, через профилер прогнать.

Alexander
14.08.2018
16:35:44
и у вас в цикле или опечатка или что
if _, err = wfile2.WriteString(hkInfo); err != nil {
fmt.Println(err)
}
а самого объявления wfile2 не нашел

Человек
14.08.2018
16:36:30

Alexander
14.08.2018
16:39:26
Да можно и по-старинке просто время замерять самому
Не такой большой уж и кол
Код

Roman
14.08.2018
16:39:53

Человек
14.08.2018
16:40:07

Subbotin
14.08.2018
16:40:44
Речь о t =time.Now() и print(time.Now().Sub(t))

Roman
14.08.2018
16:41:29

Человек
14.08.2018
16:42:09

Google

Человек
14.08.2018
16:44:29
10.195 *

Artem
14.08.2018
16:46:14

Alexander
14.08.2018
16:47:30

Человек
14.08.2018
16:51:48
Господа, мне сейчас один очень умный человек сказал что нету никакого Database Locked (Ибо когда я открывал через DB Browser for SQLITE мне выдавало эту ошибку и пришлось закрывать посторонние приложения), сейчас же убрал все функции копирования и результат сократился на 4 секунды)
Если выпелить ещё несколько функций думаю можно и до 3 сек дотянуть
Будет вообще прекрасно

Roman
14.08.2018
16:57:57

Subbotin
14.08.2018
16:59:19

Alexander
14.08.2018
17:00:20
Буферизация записи неплохо бы помогла тоже
А сам селект, кстати сколько выполняется?

Roman
14.08.2018
17:01:17

Человек
14.08.2018
17:02:14

Alexander
14.08.2018
17:03:06
Ну так вы же выбираете все строки в коде из таблицы, сколько уходит на именно этот sql?

Человек
14.08.2018
17:04:23

Alexander
14.08.2018
17:04:46
Ну, в том же браузере
Explain там, explain analyze
Хз что там в SQLite есть

Google

Alexander
14.08.2018
17:05:26
Почему то есть стойкое ощущение, что нас тут троллят

Человек
14.08.2018
17:07:15
unbelievable xdd 9к строк = 24 мс . А так я думаю что вы меня троллите ))
Я тут вообще 0 на палочке
Если вы про СТРОКИ из ВСЕХ БД вместе взятых то я не знаю как это замерить

Alexander
14.08.2018
17:09:01
Если секретного ничего нет - кинь весь проект архивом в личку или сюда, хз, домой доеду - поковыряюсь

Человек
14.08.2018
17:09:24

Alexander
14.08.2018
17:09:44

Человек
14.08.2018
17:10:45
Ок, сейчас попытаюсь. Да вообщем меня сейчас устраивает результат, сейчас попробую с буферизацией и всё) У меня не высоконагруженные системы чтоб заботится о каждой НАНО секунде)

Vadim
14.08.2018
18:23:39
Привет, когда я беру и изменяю слайс из мапы, то данные во втором слайсе будут равны данным в первом слайсе?

Daniel
14.08.2018
18:24:02
а?!

Vadim
14.08.2018
18:27:33
Структура: map[int][]int Если я беру слайс происходит, то новый слайс указывает на тот же массив или происходит копирование?

Daniel
14.08.2018
18:29:07
слайс копируется, массив остается, конечно

Vadim
14.08.2018
18:30:50
Спасибо, а то начал сомневаться)

Roman
14.08.2018
19:14:50
в Go принято писать ошибки с малой буквы? типа:
fmt.Errorf("some error occurred")
вместо
fmt.Errorf("Some error occurred")

Lesha
14.08.2018
19:17:08

Danil
14.08.2018
19:32:59
не подскажите с какими флагами собрать ехе файл из под линукса?

Roman
14.08.2018
19:33:46