Выгрузка из оперативной памяти данных программы

Arbitr

Ассоциация VN
VIP
Сообщения
3,446
Реакции
1,405
Всем привет, исходник: есть программа по сбору емайлов с урла, память забивается различными собранными данными, все больше выделяется ресурсов на программу пока не идет критическая ошибка, программа 32 битная ко всему.

Вопрос: сказали что для реализации читки выгрузки из памяти инфы нужно останавливать процесс делать выгрузку и по новой реконект к урлам, можно ли реализовать выгрузку результата из оперативной памяти без остановки процесса и последующего реконекта? результат записывать сразу в какой либо файл чтоб не утерять

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

Самый нормальный способ - обратиться к разработчику программы.
Или проще написать программу с нуля.
Ну есть ещё один вариант, декомпилить.

(вообще, больше похоже на утечку памяти, это сколько емейлов нужно чтобы забить до отказа всю ОЗУ, риторический вопрос)

У меня есть небольшое подозрение, что твоя программа может валится не из-за того, что ей не хватает памяти, а потому что она уже не в состоянии
оперировать таких большим блоком памяти. У меня есть прога, которая ограничивает объем доступной памяти для конкретной программы,
но боюсь, что произойдёт тоже самое, она просто уйдёт в своп и завалится точно так же.
Если интересно попробовать, здесь описание: LimitRAM - ограничение максимального объема ОЗУ, используемой процессом
(тебе нужно запускать вместе с ключем /HL)
 
Последнее редактирование:
Ребята может я не те слова подбираю при вопросе, скажите как какими средствами это делается чтоб я мог сказать разработчику что нужно сделать то и то то..
по утечке памяти обрабатывается fastmm borland (хотя может только заявлено но не обрабатывет должны образом? как проверить?)
может валится и из-за большого блока памяти напомню она 32 битная, потому и спросил как можно делать выгрузку из памяти (данные все равно сохраняюся во временный файл) дабы не ограничивать память а освобождать.

да и напомню доступа к исходнику у меня нет, только скомпиленый в борланде екзешник
 
Последнее редактирование:
Обычно разработчику нужно показать баг и подробно расписать в какой ситуации он происходит, но не говорить, что ему делать. Это задача не пользователя, а разработчика.
дабы не ограничивать память а освобождать.
В ОС windows нету такого понятия, как "освобождение памяти процесса".
Если ты подразумеваешь разные оптимизаторы/чистилки от всяких фирм, то всё что они делают, это перегружают ОЗУ до максимума в надежде, что некоторые из программ уйдут в своп, но это не изменяет используемый ими физический объем памяти.
потому и спросил как можно делать выгрузку из памяти
Ну, допустим, сторонней программой ты ещё можешь записать содержимое памяти процесса в файл, но освободить - нет.
 
можно сразу записывать в файл результат и не держать его в оперативке
можно остановить процесс, выгрузить его и соотв будет выгружено все из оперативы.. этот вариант не очень подходитъ\

мне когда то делали на пхп плагин который так же загружал память сервака и там сделали выгрузку.. раз в винде нельзя сделать выгрузку давайте пойдем другим путем,
как правильно и можно ли на делфи реализовать чтоб результат сразу писался в файл не оставаясь в памяти?
 
Arbitr, без исходного кода не о чем говорить.
Может, и можно, может, и нельзя (без кардинальных изменений в программе), я же не знаю какой там алгоритм. И вообще не имею ни малейшего представления о том, как она работает.

Со всем уважением, всё, что вы написали нужно говорить/спрашивать разработчика, который имеет доступ к исходному коду.
 
Dragokas, как писал выше нет возможности взять исходный код, и не спрашивал конкретного решения давая алгоритм, я спросил в принципе такое решается в делфи или нет? и если да то как примерно и все. не решается - не буду отнимать время.
 
я спросил в принципе такое решается в делфи или нет?
Да. Решается.

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

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

А по сути тоже самое - не зная, какая сложность у твоей задачи я не буду рисковать что-либо советовать.
Вдруг у тебя там множественные условия по сбору адресов с каким то динамическим сравнением, которое требует постоянного пребывания кучи данных в ОЗУ.
Если тебе нужен код, как записать инфу в файл на дельфи - я покажу, но гадать на кофейной гуще без детального техзадания не буду.
 
наверно все же не те слова выбираю..
смотри, я предлагаю показать сам принцип, т.е. если на примере удаления вирусов ты пишешь

для удаления файла через авз используется такая то команда,
для удаления файла через увс используется такая то команда.
если у вдруг файловый вирус то применяется то то и то то.

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

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

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

а возможно ты скажешь нет, в делфи все это плохо реализовано и я предлагаю написать в джаве это, я ее хорошо знаю, давай тех задание и я скажу сколько это стоит и сколько займет времени
 
Такое можно написать на любом языке высокого уровня, Delphi/C++/VB/Java ...
Писать алгоритм не хочу (не люблю), когда нет полного техзадания. Есть горький опыт. Сам же потом будешь обижаться, если окажется что алгоритм непригоден.
Но если так угодно, из тех маленьких кусочков техзадания что я понял (надеюсь верно понял),

1) коннект
2) сохранение в массив списка URL
3) обработка каждого из URL в отдельном потоке с ограничением на их одновременное кол-во. Результаты обработки сразу пишем в файл или передаём основному процессу, который будет аккумулировать.
4) если нужно завершить работу процесса, сохраняем список ещё неотработанных URL в файл, а при запуске процесса наоборот, первым делом читаем из файла.

Ну а в связи с чем происходит перегрузка памяти я не знаю.
Можно было бы контролировать, сколько памяти жрёт каждый поток, и если что, его принудительно отрубить.
Но программа может быть реализована совершенно по-разному, например, всё в 1-м потоке.
А где разработчик лопухнулся, может знать только он. Как вариант, можно снять дамп падения приложения, чтобы определить последовательность функций которая привела к разрушительному сбою.
Если разработчик скомпилировал программу с отладочными символами (если нет, то нужно попросить), то в таком дампе можно будет разобраться вообще без какой-либо подготовки, просто введя, например, в WinDbg команду !analyze -v и получить кусок исходного кода, который привёл к сбою.
 
вот, уже ответ!
тогда я задаю след вопросы разрабу
реализовано все в одном потоке или в нескольких
скомпилил ли с отладочными символами

что касается дампа, тебя не устроит дамп созданный виндой ...надо будет как то сохранять дамп с помощью Visual Studio? или..??
 
Последнее редактирование:
что касается дампа, тебя не устроит дамп созданный виндой
Arbitr, дамп сойдёт и от винды, только смотреть его должен разраб, а не я, ты или Драгокас. Так как у разраба есть расшифровка к этим отладочным символам (если он вообще их туда добавил).
 
Ребята спасибо большое, помогли разобраться в ситуации, скорее всего закажу написание паука по сбору адресов, а здесь обращусь в поддержу с отказом от лицензии
 
Назад
Сверху Снизу