Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Приложение жоско залипает   Найти похожие ветки 

 
Karabaz   (2012-02-02 00:42) [0]

Есть простейшая рыба - форма с кнопкой,
по кнопке работает простейший код:

assignfile(textfile);
while not EOF(textfile) do begin
 readln(textfile, str);
end;
CloseFile(textfile);

После CloseFile залипает все намертво минуты на 3.
Даже диспетчер задач запустить невозможно.

Куда рыть?
винда 7/x64, Delphi 7


 
Karabaz   (2012-02-02 00:47) [1]

Добавлю:
1)в файле более миллиона строк. Пробовал каждые 10 тыс итераций делать
application.ProcessMessages - не помогает.

2)
Причем, возможно это наведет вас на правильные мысли, сначала я открываю OpenDialog, из которого имя файла посылаю в процедуру.
Так вот OpenDialog остается на экране несколько секунд после того как я нажал ОК и обработка пошла, даже после ProcessMessages не пропадает.

3) там где я выше написал ReadLn, там же ниже есть код
i := i + 1;
form.caption = IntToStr(i);
вот почему я вижу что обработка идет

----------------------------
у меня подозрение, что форма где-то чего-то накапливает и после выхода из процедуры что-то накопленное освобождает или обрабатывает.


 
Германн ©   (2012-02-02 01:02) [2]


> Куда рыть?

Для начала представить реальный код, который можно скомилировать и проверить.


 
Karabaz   (2012-02-02 01:20) [3]

Вот реальный код (пока без ProcessMessages, он не решает).

procedure blabla();
var
 f: textfile;
 str: string;
 i: integer;
begin
 i := 0;
 AssignFile(f, "C:\somefile.txt");
 Reset(f);
 while not EOF(f) do begin
    str := "";
    ReadLn(f, str);
    i := i + 1;
    frmMain.Caption := IntToStr(i);
 end;
 frmMain.Caption := "before close";
 CloseFile(f);
 frmMain.Caption := "after close";
end;

Во время выполения все залипает, приложение отнимает весь CPU и отжирает около 1Гб (!!!) памяти. Т.е. пока читается эти 1.5 миллиона строк скушанная память в диспетчере задач растет, после чтения всех строк файла (caption = after close) все (вся система, т.е. мне не достается положенного CPU вообще) залипает наглухо минуты на 3. После этого в диспетчере память резко падает до того значение которое было перед запуском и все ок. Пока не запустим этот код снова.

Что здесь не так?


 
Karabaz   (2012-02-02 01:29) [4]

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

ничего другого сделать невозможно - ни сменить фокус окна (мышью или alt-tab), ни нажать кнопку пуск, ничего.


 
Германн ©   (2012-02-02 01:40) [5]


> Karabaz   (02.02.12 01:29) [4]
>
> Пока файл читается
> а) цифры в заголовке формы бегут как и полагается
> б) мышью можно двигать
>

Без ProcessMessages невозможно. Опять пример не реальный.


 
Karabaz   (2012-02-02 01:47) [6]

>> Опять пример не реальный.

Еще раз для тех кто в танке.
Это выше РЕАЛЬНЫЙ код, выполнение которого ведет себя так как я описал.
Вызов ProcessMessages был когда-то раньше, до того как я писал начальный пост. Сейчас его нет, т.к. залипание процедуры на выходе он не решает.


 
sniknik ©   (2012-02-02 08:10) [7]

> Без ProcessMessages невозможно.
изменение каптион-а формы делается через сообщения, а отрисовка его "на винде", т.что...


 
sniknik ©   (2012-02-02 09:41) [8]

> Вот реальный код (пока без ProcessMessages, он не решает).
в новом проекте на D7 в WinXP залипания от этого кода нет (хотя он и "кривой" но тут не суть). антивирус отключи...


 
Anatoly Podgoretsky ©   (2012-02-02 09:56) [9]

> Karabaz  (02.02.2012 01:29:04)  [4]

Не ври, ведь здесь нет обработки сообщений.


 
Karabaz   (2012-02-02 10:16) [10]


> > Вот реальный код (пока без ProcessMessages, он не решает).
>
> в новом проекте на D7 в WinXP залипания от этого кода нет
> (хотя он и "кривой" но тут не суть). антивирус отключи..
> .

Нет антивируса. Да и откуда ему влиять, если залипание при выходе из процедуры.

У меня есть подозрения, что дело может быть в том, что дело происходит на win7-x64


 
Karabaz   (2012-02-02 10:18) [11]

Кстати попробую сегодня именно это скомпилированное приложение на XP


 
Karabaz   (2012-02-02 10:23) [12]

>> Не ври, ведь здесь нет обработки сообщений.
То есть ты проверил и убедился что заголовок формы не перерисовывается без ProcessMessages?
или просто так пукнул?


 
brother ©   (2012-02-02 11:07) [13]

у нас не курят... намек понят?


 
Anatoly Podgoretsky ©   (2012-02-02 11:14) [14]

> Karabaz  (02.02.2012 00:42:00)  [0]

Эта рыба не рабочая


 
Anatoly Podgoretsky ©   (2012-02-02 11:15) [15]


> у нас не курят... намек понят?

Еще не хватало на него обращать внимание, он наверно и сам знает кем помрет.


 
Karabaz   (2012-02-02 11:50) [16]


> Эта рыба не рабочая

Anatoly Podgoretsky, если я сейчас выложу исходники проекта с именно этим кодом, который работает как я описал, ты открыто признаешь, что ты пустозвон?


 
Karabaz   (2012-02-02 12:00) [17]


> Еще не хватало на него обращать внимание, он наверно и сам
> знает кем помрет.

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

Занятно,
это мой второй вопрос на этом форуме и на первый ( http://delphimaster.net/view/15-1325924494/ ) вопрос была примерно такая же история: 60% ответов была абсолютная порфанация, индусы завидуют. И только потом появились адекватные люди. Может это особенность Delphi, низкий порог вхождения?

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


 
И. Павел ©   (2012-02-02 12:05) [18]

> [17] Karabaz   (02.02.12 12:00)

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

Вот не липнет у меня твой пример. Прочитать файл размером в 10 МБ — это не проблема для современных машин.


 
Karabaz   (2012-02-02 12:08) [19]


> Проверь под x86, на меньшем файле, на компьютере соседа
> по палате, в конце концов.
> Напиши результаты сюда.

Согласен, именно этим пока занимаюсь.


> Прочитать файл размером в 10 МБ — это не проблема для современных
> машин.


В моем случае файл размером около 200М, но как мне кажется это не имеет значения. Как мне кажется потребление памяти растет с каждой строкой, потому что где-то что-то копится и потом резко освобождается.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.07 c
2-1335103508
Gedimen
2012-04-22 18:05
2013.03.22
Коряво работает свой компоннет на основе TEdit


2-1329813740
Vasili Lubavin
2012-02-21 12:42
2013.03.22
Помогите с алгоритмом


2-1343646644
Pcrepair
2012-07-30 15:10
2013.03.22
Программа начинает есть память


15-1347309002
Юрий
2012-09-11 00:30
2013.03.22
С днем рождения ! 11 сентября 2012 вторник


2-1326742131
Рома
2012-01-16 23:28
2013.03.22
Нужно сделать трассировку





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский