Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Рекомендую сделать сначала минимальное изменение, с тем, чтобы перевыделение памяти делалось реже. Две строки
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 тысяч. Может быть, этого Вам уже и хватит.
Спасибо! Сообщаю, что вышло:
1. По памяти изменений нет - на 10 гигабайт текущий код съел ОЗУ там и там.
2. По скорости:
2.1 Старый вариант 574 секунды
2.2 Новый вариант 138 секунд
Получается прирост в 4 раза, что весьма хорошо! Однако, память впритык, а это далеко не все, что надо загружать....
очень удобно :)
Сконвертировал я значит CSV в бинарник, за вычетом даты.
Что получается, при работе скрипт памяти отъел 1 гигабайт, что по сравнению с 10 очень хорошо. Однако, всё равно много :)
По скорости - всего 16 секунд! Весьма не дурно!
Рекомендую сделать сначала минимальное изменение, с тем, чтобы перевыделение памяти делалось реже. Две строки
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 тысяч. Может быть, этого Вам уже и хватит.
Вообще-то третий параметр для ArrayResize() непросто так указан... фиговое изменение...
Документацию прочтите
Вообще-то третий параметр для ArrayResize() непросто так указан... фиговое изменение...
Документацию прочтите
Что Вам удалось выудить из документации по поводу третьего параметра, полезное для этого случая, когда решается задача подъема в память .csv, создаваемых в разных программах и имеющих произвольный размер?
Не стесняйтесь, предложите изменение лучше, нефиговое, повышающее быстродействие перевыделения памяти (снижающее число вызовов ArrayResize) сильнее, чем двоичный поиск...
Спасибо! Сообщаю, что вышло:
1. По памяти изменений нет - на 10 гигабайт текущий код съел ОЗУ там и там.
2. По скорости:
2.1 Старый вариант 574 секунды
2.2 Новый вариант 138 секунд
Получается прирост в 4 раза, что весьма хорошо! Однако, память впритык, а это далеко не все, что надо загружать....
После считывания, в bool CSVReader::Load(int start_line), после строки
FileClose(filehandle);
вставьте освобождение памяти
ArrayResize(m_cells,m_total_rows*m_total_columns);
Освободит ненужные 0-50% памяти, занятой m_cells. Только самим m_cells, без содержимого ячеек.
Сейчас делаю небольшую библиотеку для быстрой работы с CSV.
На скрине тест работы, который проходит за 7 секунд!!! Процессор Xeon, 3.0 частота.
Сначала скрипт составляет формат данных для каждого столбца. Столбцов 6. Потом добавляется 1000000 строк в таблицу, далее они заполняются числами от 0 до 999999. Согласно формату данных числа могут восприниматься по разному. Потом сохраняется всё в файл.
Размер файла 65.4 Мб. Вся структура в памяти занимала 232 Мб.
Сконвертировал я значит CSV в бинарник, за вычетом даты.
Что получается, при работе скрипт памяти отъел 1 гигабайт, что по сравнению с 10 очень хорошо. Однако, всё равно много :)
По скорости - всего 16 секунд! Весьма не дурно!
ну сам скрипт еще корявый значит
После считывания, в bool CSVReader::Load(int start_line), после строки
FileClose(filehandle);
вставьте освобождение памяти
ArrayResize(m_cells,m_total_rows*m_total_columns);
Освободит ненужные 0-50% памяти, занятой m_cells. Только самим m_cells, без содержимого ячеек.
Спасибо, однако после закрытия файла/окончания работы скрипта память быстро и так освобождается. Вот как бы снизить потребление во время работы....
Сейчас делаю небольшую библиотеку для быстрой работы с CSV.
На скрине тест работы, который проходит за 7 секунд!!! Процессор Xeon, 3.0 частота.
Сначала скрипт составляет формат данных для каждого столбца. Столбцов 6. Потом добавляется 1000000 строк в таблицу, далее они заполняются числами от 0 до 999999. Согласно формату данных числа могут восприниматься по разному. Потом сохраняется всё в файл.
Размер файла 65.4 Мб. Вся структура в памяти занимала 232 Мб.
Весьма интересно. Вы планируете публично опубликовать свои достижения в программировании?
ну сам скрипт еще корявый значит
Можете сказать, что в нём исправить?