Вот суть того, что я пытаюсь сделать. Я храню файлы в таблице SQL. Таблица большая с 400 записями, но каждая запись хранит архив файлов и их размер составляет приблизительно 100 МБ каждый. В последнее время, мы должны были изменить наше шифрование key.So Я пишу резьбовой (5 потоков) код для расшифровки с помощью ключа устаревшего и затем шифровать с использованием нового key.This является то, что каждая нить делаетИсключение ошибки памяти с ++ ++
struct DataToReencrypt
{
int id;
string data;
}
vector<DataToReencrypt> results;
// database open
SELECT ID,FileData From Files WHERE ID BETWEEN 1 AND 80 // 81-160 and so on.
// database connection close
// database connection open
for(int i=0;i<results.size();i++) // results contain the result of the above query.
{
string decrypted = LegacyDecryption(results[i].FileData);
string encrypted = NewEncryption(decrypted);
UPDATE Files SET FileData = encrypted WHERE ID = results[i].ID;
}
// database connection close
Проблема когда я пытаюсь это сделать, я получаю это исключение исключения C++ bad_memory, а также исключение выделения SQL Memory. Пока я читал исключение bad_memory alloc, которое я прочитал, C++ выдает его, когда компилятор не может выделить новую память. На всякий случай, если это помогает, я запускаю это в системе с 6 ГБ оперативной памяти (я должен сделать эту работу в 6 ГБ оперативной памяти, так как это минимально наш продукт поддерживает), и хотя этот процесс выполняется, процесс sqlserver.exe занимает почти 4 ГБ пространства оперативной памяти. Пожалуйста, помогите с любыми проблемами с этим подходом или в любом случае, чтобы его можно было улучшить.
Я не уверен, что здесь много чего, вы исчерпали память. Как правило, решение состоит в том, чтобы использовать меньше памяти. – user657267
Просто чтобы быть ясным - каждая запись составляет 100 МБ, и вы читаете 80 из них в память? Это не подходит для 6GB –
@ TheDark Вы правы. Максимальный размер файла - 100 МБ. По крайней мере, половина файлов меньше. Но я не хочу брать на себя предположения о будущей проверке. Кроме того, это выполняется правильно один раз в 2 или 3 раза. Поэтому я предполагаю, что это проблема памяти. В любом случае, чтобы улучшить процесс здесь? – Crusher