Если кто-то может мне помочь, у меня полностью нет идей.Проблема с производительностью карт
Так у меня есть этот код (это очень упрощенная версия моего кода):
while(readNewFile())
{
while(getNewStructFromFile())
{
unsigned long starttime = GetTickCount();
customerData.fillFromBinaryData(structPointer);
cout<< GetTickCount() - starttime;
aMap.insert(pair<int,string>(customerData.phoneNumber,""));
}
// Ouptut all data
aMap.clear();
}
В основном, это просто считывает запись из двоичного файла. customerData
получить данные и заполнить их переменными данными из него. Затем он вставляет телефонный номер в карту (для отладки я действительно просто вставляю int и пустую строку).
Проблема заключается в том, что через короткое время эта программа будет очень медленной; если я прокомментирую вставку карты, программа работает нормально без проблем с постоянным временем выполнения для каждого файла. Если я использую вставку карты, после нескольких файлов программа снова идет очень медленно (от 8 до 10 секунд до 1 минуты и более). Но отладка с GetTickCount()
, это показывает мне, что задержка происходит в customerData.fillFromBinaryData
(сначала 0 мс, а затем она перескакивает до 30-40 мс (для заполнения переменных класса)). Но если я прокомментирую эту простую вставку карты, нет никакой задержки в заполнении объекта данными! Где в этом логика? Не мог бы кто-нибудь дать мне подсказку, у меня нет идей. Извините, если этот вопрос не очень хороший.
Я пробовал разные типы карт, но опять же, это показывает мне, что задержка не в вставке карты.
Редактировать/Возможное решение:
В случае, если кто имеет аналогичные проблемы, я установил VS2015, и задержка с использованием карт, нет! Я не уверен, как это связано, но Ура!
Вы печатаете все данные в каждом цикле? Данные становятся все больше и больше ... – Aleksandar
Я просто не могу быть единственным человеком, которому интересно, почему этот вопрос отмечен 'asn.1', учитывая, что в теле вопроса вообще нет упоминания об этом. – WhozCraig
Я выводил один раз в файл, и после этого я очищаю карту, почему бы ее увеличить? customerData - это всего лишь одна запись клиента, каждый раз, когда она получает новое значение. Я действительно читаю из asn-файла :) Я не уверен, почему я добавил тег ... – Silencer