@dlangru

Страница 157 из 719
Dmitry
18.04.2017
13:02:21
да

Oleg
18.04.2017
13:02:29
вообще не тоже самое

у тебя данных может быть на Мб 10 от силы

объясню

Google
Oleg
18.04.2017
13:04:09
1 байт это от 0 до 256

чтобы записать один байт в бинарном виде нужно места в 1 байт, как ни странно

чтобы в текстовом от 1 до 3

Dmitry
18.04.2017
13:05:29
а... понял

почему же столько оперативки съедается?

Oleg
18.04.2017
13:06:00
а это вопрос

может быть так странно работает драйвер БД

Dmitry
18.04.2017
13:07:11
для структуры хранящей один такой маршрут сделал: cargpspoints.length; оно вывело количество элементов: 424086

Oleg
18.04.2017
13:07:13
трек в отдельной таблице, как я понимаю

Dmitry
18.04.2017
13:07:49
Олег, было до меня, но там есть своя логика т.к. там куча иных данных еще хранится

Oleg
18.04.2017
13:08:44
имхо очень странный подход

никогда бы так не сделал

Google
Dmitry
18.04.2017
13:09:00
ну тут уж как есть...

Oleg
18.04.2017
13:09:27
так ты получишь сколько в оперативе занимает твой массив

Dmitry
18.04.2017
13:10:20
а без typeof не будет работать?

умножил, получил: 16 963 440 т.е. около 16MB в памяти



Oleg
18.04.2017
13:16:47
ну где-то так

именно сам массив

вот выдели для него заранее память и посмотри сколько тогда программа будет хавать

Dmitry
18.04.2017
13:20:06
т.е. грубо говоря если я выделю 20МБ то все влезет с запасом?

так ты получишь сколько в оперативе занимает твой массив
а вся остальная память (из этих 200) чем тогда занята?

Oleg
18.04.2017
13:22:42
если ты говоришь, что сборщик отрабатывает, то остальное хз

т.е. грубо говоря если я выделю 20МБ то все влезет с запасом?
вообще для таких случаев нужно выделать точно память

узнал количество элементов потом выделил

Dmitry
18.04.2017
13:23:46
погоди, я же должен выделить память для массива структур: carGPSPoint [] cargpspoints; ?

просто не пойму, как я узнаю количество элементов в структуре заранее до того как выборку из БД не сделаю?

Oleg
18.04.2017
13:30:57
ну так можно же получить COUNT не?

в sql запросе прям

Dmitry
18.04.2017
13:31:16
а...

Oleg
18.04.2017
13:31:54
auto cargpspoints = new carGPSPoint[](countOfPoints);

Google
Oleg
18.04.2017
13:32:15
а потом не добавляешь к массиву, а присваиваешь в нужном индексе нужное значение

Dmitry
18.04.2017
13:32:54
запрос: SELECT COUNT(*), historygps_10002.Id, historygps_10002.RecordDate .... выведет одну единственную строку, а не массив строк

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

Oleg
18.04.2017
13:34:47
в sql я вообще не шарю

Dmitry
18.04.2017
13:35:10
тогда не получится узнать количество элементов. Нужно отдельный запрос делать

Oleg
18.04.2017
13:35:12
GC.collect это должен делать

Dmitry
18.04.2017
13:36:40
да в терии ни в чем, просто хочется без них, чтобы оно само как-то работало т.к. пока я определенно делаю прототип и мне затачивать скорость не очень надо, но в моем случае отъедается 1750RAM и все останавливается и непонятно как дальше быть

Pavel
18.04.2017
13:38:36
Отдельный запрос на количество данных это нормально, и вычислительную мощность экономит.

Единственный подвох - если после этого в данные что-то дописали еще то ты выделишь неправильное количество памяти.

Dmitry
18.04.2017
13:41:24
блин, оно почему-то каждый раз показывает одинаковый размер массива структур т.е. где-то он не осовобождается. Глазами вообще не вижу где может быть ошибка:



Oleg
18.04.2017
13:46:50
ну так у тебя хоть как-то меняется размер MySQLPointsLonLat?

Dmitry
18.04.2017
13:48:44
э... проверил... не меняется...

``

writeln("\nMySQLPointsLonLat: ", MySQLPointsLonLat.count);

Oleg
18.04.2017
13:50:01
ну тогда чего ты хочешь от этого массива?

ты же его каждый раз по новой заполняешь

Dmitry
18.04.2017
13:50:25
щас смотрю почему ничего не меняется....

так, а как праивльно сделать внутри функции есть переменная string sql = "select from A" дальше я хочу сделать замену: sql = sql.replace("A", "B") query(sql) ... но проблема в том, что у меня тогда первый запрос перезапишется. Мне нужно чтобы replace работал только вниз и верхний не трогал. Я конечно могу написать: query(sql.replace("A", "B")) но может есть еще варианты?

Google
Dmitry
18.04.2017
14:24:01
пробую еще аппендер: cargpspoints = appender(cargpspoint); template std.array.appender cannot deduce function from argument types !()(carGPSPoint), candidates are: так тоже не получается: cargpspoints = appender!(carGPSPoint)(cargpspoint); template std.array.appender cannot deduce function from argument types !(carGPSPoint)(carGPSPoint)

Oleg
18.04.2017
14:28:46
так у тебя же в любом случае уже есть размер массива cargpspoints

зачем тебе appender?

Dmitry
18.04.2017
14:30:10
ну тот вроде быстрее работает чем: ~=

Oleg
18.04.2017
14:31:17
так тебе вообще не нужно элементы добавлять к массиву

Dmitry
18.04.2017
14:33:19
почему? Вот тут внутри цикла я построчно объожу данные: foreach(i, point;MySQLPointsLonLat) { cargpspoint.id = point[0].coerce!ulong; cargpspoint.recordDate = point[1].coerce!string; cargpspoints ~=cargpspoint; // в массив структур } кладу их в структуру, а потом помешаю структуру в массив структур

Oleg
18.04.2017
14:36:13
блять

... auto pointsLonLat = result.array; ... // carGPSPoint[] cargpspoints; auto cargpspoints = new carGPSPoint[](pointsLonLat.length); // хоть malloc юзай ... foreach (i, point; pointsLonLat) { carGPSPoint tmp; ... // work with tmp ... cargpspoints[i] = tmp; ... } ...

Admin
ERROR: S client not available

Oleg
18.04.2017
14:37:46
и, кстати, по правилам стилевым языка переменные всегда с маленькой буквы, методы тоже, а названия типов всегда с большой (у тебя там всё в разнобой)

Dmitry
18.04.2017
14:38:06
погоди, ты сделал тоже самое только с другим способом аллокации?

Oleg
18.04.2017
14:38:26
да, я один раз выделил память в начале работы, а потом заполнил массив

примерно так и нужно делать

этот способ быстрее и сборщик не вызывается в цикле, где ты по pointsLonLat проходишь

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

у тебя же нет никаких условий в этом цикле (добавлять элемент или нет), да и если бы были, то можно было бы так выделить и потом просто зафиксировать сколько элементов было записано, да и всё

но, скорее всего это никак не изменит потребление памяти))))

Dmitry
18.04.2017
14:41:50
%)

хороший вывод

Oleg
18.04.2017
14:42:10
потому что GC.collect должен работать корректно

Google
Oleg
18.04.2017
14:42:59
а здесь просто получается небольшая оптимизация по обращению к нему и всё

что-то другое отъедает

qwerty
18.04.2017
15:00:49
в D нельзя как в C++ объявить массив используя переменную для количества элементов в массиве?

код на С++ http://vpaste.net/4aOhB

Как аналогично сделать в D? Сделать динамический массив, а потом задать ему длину?

Oleg
18.04.2017
15:09:59
auto arr = new uint[](lengthOfArr);

в чём проблема?)

qwerty
18.04.2017
15:11:03
такой массив выделится ведь в heap?

а не в stack?

Oleg
18.04.2017
15:11:30
да

qwerty
18.04.2017
15:12:01
int[] arr; arr.length = var; а так в stack?

Oleg
18.04.2017
15:12:04
чтобы на стеке нужно что-нибудь другое, типа scoped или аллокаторов разных

qwerty
18.04.2017
15:12:27
понял

а так делать нельзя readf("%s", &arr[i]);?

arr это int[]

Oleg
18.04.2017
15:19:30
точно не помню, но почему нет?

всмысле возможно нужно &(arr[i])

ну или arr.ptr + i

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

http://dlang.org/changelog/2.074.0.html#std-format-formattedRead

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