Ошибки, баги, вопросы - страница 3392

 
Nikolai Semko #:
С одной стороны я Вас понимаю на счёт кода fxsabera , но, с другой стороны, если бы не поленились ( ведь вопрос задали Вы в надежде получить ответ) и прочитали хотя бы пару страниц обсуждения с сообщения, на которое дал ссылку, то не гнали бы напраслину.
Конструкция ресурсы+ union - это не костыль, а низкоуровневая нативная фича, на основе которой по сути построены сами глобальные переменные. А вот пытаться реализовать подобное через SQLite - это реальный костыль, который будет работать на несколько порядков медленнее.

Перейдя на топик куда ведёт ссыль, в коде автор всегда дает линк на КБ
Перейдя в КБ посмотреть что там, дальше не захотелось вникать.
https://www.mql5.com/ru/code/22166

Для глобалочек ещё куда не шло, можно посмотреть.
https://www.mql5.com/ru/forum/320395/page6#comment_12910394


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

//заблокируем базу данных перед выполнением транзакций
DatabaseTransactionBegin(database);

//тут пишем в базу

//все транзакции прошли успешно - зафиксируем изменения и разблокируем базу данных
DatabaseTransactionCommit(database);
То есть как я понял для записи в базу, есть блокирующие защитные функции как я понял.
Если это то о чем я думаю (а думаю о реализации взаимной блокировки) то это же круто.
Интересно какое поведение будет на чтение из базы, когда она заблокирована. Вероятно возвращать ошибку, которую легко обработать.
В общем надо пощупать.  
 
Roman #:

Перейдя на топик куда ведёт ссыль, в коде автор всегда дает линк на КБ
Перейдя в КБ посмотреть что там, дальше не захотелось вникать.
https://www.mql5.com/ru/code/22166

Для глобалочек ещё куда не шло, можно посмотреть.
https://www.mql5.com/ru/forum/320395/page6#comment_12910394


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

То есть как я понял для записи в базу, есть блокирующие защитные функции как я понял.
Если это то о чем я думаю (а думаю о реализации взаимной блокировки) то это же круто.
Интересно какое поведение будет на чтение из базы, когда она заблокирована. Вероятно возвращать ошибку, которую легко обработать.
В общем надо пощупать.  

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

Если во время одного из запросов происходит ошибка, отменяются все запросы, входящие в транзакцию.

 
Roman #:

Перейдя на топик куда ведёт ссыль, в коде автор всегда дает линк на КБ
Перейдя в КБ посмотреть что там, дальше не захотелось вникать.
https://www.mql5.com/ru/code/22166

Для глобалочек ещё куда не шло, можно посмотреть.
https://www.mql5.com/ru/forum/320395/page6#comment_12910394


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

То есть как я понял для записи в базу, есть блокирующие защитные функции как я понял.
Если это то о чем я думаю (а думаю о реализации взаимной блокировки) то это же круто.
Интересно какое поведение будет на чтение из базы, когда она заблокирована. Вероятно возвращать ошибку, которую легко обработать.
В общем надо пощупать.  

Транзакции обеспечивают атомарность изменений. Результат UPDATE/INSERT/DELETE зафиксируется в базе после COMMIT. Для читателя базы - одномоментно, вот данных не было и тут раз и много всяких :-)

Скорость работы SQLite критично зависит от скорости доступа к диску. Если база лежит в RAM-диск (или используется memory: база), то задержки практически на грани погрешности измерений. 

 
Koldun Zloy #:

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

Если во время одного из запросов происходит ошибка, отменяются все запросы, входящие в транзакцию.

Да, спасибо что уточнили. Но нам никто же не запрещает это делать для оного запроса )
Смысл в том, что есть блокировка. Что нам и нужно.
А возможность  объединять несколько запросов, позволяет писать пропущенные данные вместе с текущими.
Это же находка просто. То что нужно.

Maxim Kuznetsov #:

Транзакции обеспечивают атомарность изменений. Результат UPDATE/INSERT/DELETE зафиксируется в базе после COMMIT. Для читателя базы - одномоментно, вот данных не было и тут раз и много всяких :-)

Скорость работы SQLite критично зависит от скорости доступа к диску. Если база лежит в RAM-диск (или используется memory: база), то задержки практически на грани погрешности измерений. 

Спасибо. Получается через память, это подобие memory mapped files.
Пошел учить базы. 

 
Roman #:

Да, спасибо что уточнили. Но нам никто же не запрещает это делать для оного запроса )
Смысл в том, что есть блокировка. Что нам и нужно.
А возможность  объединять несколько запросов, позволяет писать пропущенные данные вместе с текущими.
Это же находка просто. То что нужно.

Спасибо, пошел учить базы. 

Для одного запроса незачем. Блокировка есть в любом случае.

 
Где посмотреть актуальное описание методов/операторов для векторов/матриц?
void OnStart()
{
  const double Array[] = {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3};
  matrix<double> Matrix;
    
  // https://www.mql5.com/ru/docs/basis/types/matrix_vector
  Matrix.FromBuffer(4, 3, Array); // 'FromBuffer' is not a member of 'matrix' type
}

Метод matrix/vector

Аналог в NumPy

Описание

void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0)

frombuffer

Создает матрицу из одномерного массива

 
fxsaber #:
Где посмотреть актуальное описание методов/операторов для векторов/матриц?

Такая же ошибка выводится для метода .Sort() в векторах.
Разработчик отвечал, что метод не реализован.
Скорее всего то-же самое для метода .FromBuffer()

Его нет

mm

 

 
Размер вектора/матрицы может быть больше размера массива?
void OnStart()
{
  vector<double> Vector = {};
  double Array[];
  
  Print(typename(Vector.Size())); // ulong
  Print(typename(Array.Size()));  // uint
}
 
fxsaber #:
Размер вектора/матрицы может быть больше размера массива?

Да.

Размер массива больше чем INT_MAX - Создайте массивы размером больше чем MAX элементов в одном измерении.
Размер массива больше чем INT_MAX - Создайте массивы размером больше чем MAX элементов в одном измерении.
  • 2022.02.20
  • www.mql5.com
возможность создавать и использовать массивы размером больше чем MAX элементов в одном измерении. кому нужно хранить более чем 2147483647 элементов в массиве. Даже массив однобайтовых значений char uchar будет занимать от 2 GB оперативки
 
Roman #:

Перейдя на топик куда ведёт ссыль, в коде автор всегда дает линк на КБ.  

Не поняли меня про какое обсуждение говорил. 
Ушли в ссылку по ссылке, а надо было остаться на обсуждении, ссылку которого давал.
Причина обращения: