Что нового

Попытка оптимизация скрипта

GameFP

Новичок
Сообщения
11
Репутация
0
Доброго времени суток!
Мож кто подскажет есть некий скрипт который обрабатывает различные данные и заносит в базу, когда данных для обработки не много скрипт весит в памяти примерно 5Mb, но когда данных много доходит до 50Mb!
Скрипт зациклен, то есть через Sleep выполняется сново и размер его в памяти опять начинает расти к примеру от 50Mb до 100 и т.д
Можно ли както сбрасывать данные функций? то есть отчистить скрипт в памяти до изначальных размеров?
Структура примерно такая
Код:
#include <Array.au3>
#include <Log.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Server=false,$Login=false,$Password=false,$unknown, $nConnect,$Timer=60000
$FileSettings = @ScriptDir & '\Settings.ini'
If FileExists($FileSettings) Then
	; много кода чтения из ini файла
Else
	MsgBox(16,'Ошибка','Файл настроек не существует!')
	Exit
EndIf
While 1
	If $SaveEmails Then DirCreate(@ScriptDir & '\AnalyzeBackupMails')
	If $WriteLog Then
		DirCreate(@ScriptDir & '\AnalyzeLog')
		$hLog = _Log_Open($FileLog & @MDAY & '.' & @MON & '.' & @YEAR & '.log','----- Script -----')
	EndIf
	$Start = _Start()
	GUIDelete()
	If $WriteLog Then _Log_Close($hLog)
	TCPCloseSocket($nConnect)
	TCPShutdown()
	MsgBox(64,'Инфо','Работа закончена',3)
	Sleep($Timer)
WEnd
Func _Start()
	; код
	_Delete($data)
	_Save($data2)
EndFunc
Func _Delete($data)
	; код
	_Save($data2)
EndFunc
Func _Save($data)
	; код
	_Exit($data)
EndFunc
Func _Exit($data)
	; код
EndFunc
; и так много еще функций

Заранее благодарю!
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
GameFP [?]
Можно ли както сбрасывать данные функций? то есть отчистить скрипт в памяти до изначальных размеров?
можно :smile:
нет реального кода - нет точного совета
как вариант, могу предположить, что код читает файл в память и там с ним работает, если так, то выхода никакого. файл растет, объем памяти для чтения растет.можно ли файл читать как ini? если да, то тут вариант уменьшения затрат памяти
либо самое банальное - где-то в коде не обнуляется массив или структура.
вобщем, нет кода - будем догадываться.. :smile:
 
Автор
G

GameFP

Новичок
Сообщения
11
Репутация
0
Да, скачивается файл и читается в памяти, одно и тоже действие для всех файлов. Вызываю функцию, она скачивает и обрабатыевает файл и возвращает результат, далее другая финкция пишет результат в базу, и так цилично до окончания файлов, после обработки всех файлов ждет n-времени и повторяет тоже самое.
На каком этапе можно все "обнулить" и как это сделать?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
частая ошибка - не закрывается дескриптор файла(ов). Отсюда утечка памяти.
у тебя функции открытия и закрытия лога раздельны. зачем? в них идет обработка файла и запись в базу, значит открыл и закрыл без условий. все в одной функции
 
Автор
G

GameFP

Новичок
Сообщения
11
Репутация
0
То есть желательно к примеру лог, открывать и закрывать в одной функции. И еще вопрос если функция вызывается 100 раз в ней не надо грохать переменные или приравнивать их к "", если они локальные. У меня в функции получаются данные обрабатывается и возвращается результат в данную функцию как я понимаю невозможно заставить меньше жрать память
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
открыл для чтения, прочитал, закрыл - одна функция
открыл базу, записал, закрыл , обнулил переменную, в которую читал в предыдущей функции - вторая функция
ну а на самом деле, что там у тебя написано я не знаю. может проблема в другом. анализируй код.
 
Автор
G

GameFP

Новичок
Сообщения
11
Репутация
0
Каким образом обнулять переменную предпочтительней?
Благодарю joiner помогли
 
A

Alofa

Гость
GameFP сказал(а):
Каким образом обнулять переменную предпочтительней?
Благодарю joiner помогли
Локально объявленые переменные внутри функции (Func...Return...EndFunc) автоматически обнуляются при выходе из данной функции. А точнее они просто перестают существовать.
Вы почитайте Описание языка, посмотрите и проанализируйте примеры.
 
Автор
G

GameFP

Новичок
Сообщения
11
Репутация
0
Благодарствую, попробую разобратся
 
Верх