Форум: "Начинающим";
Текущий архив: 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.083 c