Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.052 c
15-1352554012
Артём
2012-11-10 17:26
2013.03.22
Написание программ


2-1341059064
Начинающий41
2012-06-30 16:24
2013.03.22
DBEDIT


2-1335471178
SIV5000
2012-04-27 00:12
2013.03.22
Меню > Создать


15-1334125667
boriskb
2012-04-11 10:27
2013.03.22
Построение равносторонего треугольника


15-1336941003
Юрий
2012-05-14 00:30
2013.03.22
С днем рождения ! 14 мая 2012 понедельник