Что нового

Скрипт поедает память. Как определить, почему?

Статус
Закрыто для дальнейших ответов.
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
Вот это не оно, не?

c4f2ac0c1a.jpg
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
не оно. это закрытие стоит после цикла, а в цикле идет многократное открытие без закрытия. так нельзя делать
в циклах
Код:
Do
$fileopen = FileOpen(@ScriptDir&"\domen.txt",0)
While
;другой код
WEnd
;в циклах ни одного закрытия
Until
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
Ой, только сейчас до меня дошло... В цикле...
joiner, Вы таки правы...
 

joiner

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

bescom

Новичок
Сообщения
61
Репутация
0
Я правильно понимаю, что сделать открытие файлов, потом цикл, а потом закрытие?
 

joiner

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

bescom

Новичок
Сообщения
61
Репутация
0
Спасибо. Я этот момент как-то недопонимал...
Вопрос решен и все точки над i расставлены. Наверное, тему через пару часов закрываю, если никто не захочет ничего добавить.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
bescom, не бойтесь выкладывать код, т.к. он здесь никому не интересен. На форуме достаточно гуру, которые напишут вашу программу за 5 мин, если это будет нужно. В любом случае, вы всегда можете выложить только проблемную часть кода и это даже предпочтительнее.
 
Автор
bescom

bescom

Новичок
Сообщения
61
Репутация
0
Yashied, конечно же, дело не в самом коде, который здесь могут написать в сто раз лучше и быстрее, чем я, а в идее программы, которая уникальна. Как только проблемная часть кода была найдена, я этот кусок опубликовал. И да, еще раз всем спасибо за помощь и терпение. :beer:
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Что и требовалось доказать. Это я о заблуждении что AutoIt сам все закрывает.
Все что было открыто, нужно закрыть, а не полагаться на AutoIt. Тогда таких проблем обычно не бывает.
 

joiner

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

Prog

Продвинутый
Сообщения
537
Репутация
65
joiner [?]
локальные переменные обнуляются при выходе из функции
То что они обнуляются не значит что файл закроется.

дескрипторы можно не закрывать, если программа завершает работу
Откройте несколько десятков (или сотен) тысяч файлов не закрывая их. Посмотрите что будет.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
OffTopic:
Prog
да неужели? ты нам открыл глаза, ой спасибки. спас прямо..ты еще Yashied-у в личку напиши подробно - как он не прав со своим утверждением
 

Prog

Продвинутый
Сообщения
537
Репутация
65
joiner, запусти код о котором я говорил (перед этим создай файл File.txt на диске C:smile:.
Код:
$x=0
Do
   $fileopen = FileOpen("C:\File.txt")
   $x=+1
Until $x>1000000
MsgBox(0, "", "Посмотри сколько памяти использует скрипт")
И посмотри заодно справку на функцию FileOpen.
По окончании работы необходимо освободить ресурсы, выделенные дескриптору с помощью функции FileClose().
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Prog сказал(а):
То что они обнуляются не значит что файл закроется.
Файлы да, а вот, например, структуры автоматически будут уничтожены при выходе из функции или при изменении связанной переменной.

Prog сказал(а):
Откройте несколько десятков (или сотен) тысяч файлов не закрывая их.
При выходе из программы? Ничего не будет. Все выделенные ресурсы будут автоматически удалены системой при закрытии процесса. Другой вопрос, что так делать не рекомендуется во избежании возможной потери данных.
 

joiner

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

Prog

Продвинутый
Сообщения
537
Репутация
65
Yashied [?]
При выходе из программы? Ничего не будет.
Код выше запускали? Ничего что программа быстро исчерпывает всю доступную память и перестает работать? Как раз подобное произошло у ТС.

Хотите запутывать новичков вредными советами? Дело ваше.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
joiner сказал(а):
...дескрипторы можно не закрывать, если программа завершает работу

Yashied сказал(а):
При выходе из программы? Ничего не будет. Все выделенные ресурсы будут автоматически удалены системой при закрытии процесса. Другой вопрос, что так делать не рекомендуется во избежании возможной потери данных.

Prog сказал(а):
Код выше запускали?

Мы вообще об одном и том же говорим?
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Yashied [?]
Мы вообще об одном и том же говорим?
Попробую еще раз объяснить.
Вы на мой вопрос.
Prog [?]
Откройте несколько десятков (или сотен) тысяч файлов не закрывая их. Посмотрите что будет.
Дали ответ.
Yashied [?]
При выходе из программы? Ничего не будет. Все выделенные ресурсы будут автоматически удалены системой при закрытии процесса.
Только проблема в том что программа не сможет держать столько дескрипторов и перестанет работать, из-за недостатка памяти. Можете убедится в этом запустив код выше. Выход из программы тут вообще не причем, т. к. программа заглючит во время своей работы.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Prog
никто больше не задает вопросы. все давно поняли смысл написанного. только до одного участника обсуждения не доходит
еще раз прочитай http://autoit-script.ru/index.php?topic=19744.msg117831#msg117831
и успокойся на том, что все всё прекрасно понимают. сходи на шашлыки. а то клава устала
 
Статус
Закрыто для дальнейших ответов.
Верх