Прожорливость памяти ОЗУ MT5, проблемы с чтением/записью больших файлов - страница 5

 
Maxim Dmitrievsky:

ну так это 2-мерный массив, матрица. Пишите его

Можете пример показать, как писать и считывать многомерные массивы? В теории то оно понятно, но реализация не ясна.

 
Aleksey Vyazmikin:

Можете пример показать, как писать и считывать многомерные массивы? В теории то оно понятно, но реализация не ясна.

точно так же как одномерные, через WriteArray()

 
Aleksey Vyazmikin:

Мне удобно пользоваться классом, пользуюсь им уже года 3, ещё с MT4 - он удобен, но, зараза, медленно работает.

Прочесть строку конечно просто, но превратить это все в рабочую структура ячеек куда сложней.

Что значит я не могу использовать классы? Использую, к тому же сотрудник метаквотов написал этот класс. И потом, я же фактически нанял человека, заплатил и ожидал получить готовый продукт, но мне заявили что тормоза сие это нормально... я поверил, но сейчас вот ещё и с памятью перебор - возмущает.

Класс расчитан на небольшие файлы. Совершенно неважно кто создал этот класс. Сейчас нужен другой подход к чтению файла, поэтому тот класс с этим файлом справляется плохо.

 
Roffild:

Класс расчитан на небольшие файлы. Совершенно неважно кто создал этот класс. Сейчас нужен другой подход к чтению файла, поэтому тот класс с этим файлом справляется плохо.

Увековечу. Охренел, спасибо. 

 
Maxim Dmitrievsky:

точно так же как одномерные, через WriteArray()

Нашел пример, надо попробовать, придется писать два файла - для общего понимания, и видимо для ускорения обработки.

Спасибо.

Добавлено: Я так понимаю, что можно писать сразу только 1 массив, что конечно не очень удобно.
 
Roffild:

Класс расчитан на небольшие файлы. Совершенно неважно кто создал этот класс. Сейчас нужен другой подход к чтению файла, поэтому тот класс с этим файлом справляется плохо.

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

 
Aleksey Vyazmikin:

Нашел пример, надо попробовать, придется писать два файла - для общего понимания, и видимо для ускорения обработки.

Спасибо.

Добавлено: Я так понимаю, что можно писать сразу только 1 массив, что конечно не очень удобно.

очень удобно :)

 
Maxim Dmitrievsky:

очень удобно :)

Не удобно, так как для разных типов данных нужно создавать отдельный файл.

 
Aleksey Vyazmikin:

Не удобно, так как для разных типов данных нужно создавать отдельный файл.

Ну можно гнать в одну директорию чтоб не раскидывались. И проблем ни каких. Что я всегда и делаю для экспертов. Пишу сразу создание директории название_программы/номер_счета и в нее гоню все файлы.

 

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

         m_total_rows++;
         ArrayResize(m_cells,m_total_rows*m_total_columns,10000);

в bool CSVReader::AddData(string data_str,bool header) замените на

         m_total_rows++;
         if (m_total_rows*m_total_columns>ArraySize(m_cells)) ArrayResize(m_cells,2*m_total_rows*m_total_columns);

Число перевыделений памяти с копированием должно стать O(log(n,2)) вместо O(n). 20 вместо 600 тысяч. Может быть, этого Вам уже и хватит.

Причина обращения: