21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
1

Долгая загрузка .bmp файла после простоя компьютера

22.08.2015, 09:11. Показов 1514. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подгружаю по мере надобности .bmp - размер порядка 129 метров каждый. При подгрузке нового уничтожаю старый.
Если этого не делать - переполнение памяти наступает после третьего файла.
в .h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace Painted_Panel
{
    class TPanel : public Extctrls::TPanel
    {
        typedef Extctrls::TPanel Inherited;
    public:
        static Graphics::TBitmap *map;
        __fastcall virtual TPanel(Classes::TComponent* AOwner)
            : Extctrls::TPanel(AOwner) {}
    protected:
        virtual void __fastcall Paint(void)
        {
 
            if(Tag==777)
            {
                Canvas->StretchDraw(this->ClientRect, map);
            }
            else Inherited::Paint();
        }
    };
    Graphics::TBitmap *TPanel::map = 0;
};
И само создание, например по кнопке
C++
1
2
3
4
PanMap[i]->Tag = 777;
String FN = ucsCurrentDir + "\\devdata\\" +MapInd+ ".bmp";
                        TPanel::map = new Graphics::TBitmap;
                        TPanel::map->LoadFromFile(FN);
Все хорошо работает, но есть одна проблема - если комп постоит долго - первый раз bmp подгружается очень долго - порядка 7 секунд. Потом все норм - меньше секунды. В чем трабл, возможно ли починить? Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2015, 09:11
Ответы с готовыми решениями:

Долгая загрузка сайта после простоя
После 20 минут простоя сайт грузится существенно дольше(~8000ms) в сравнении со следующими...

Долгая загрузка Windows 7 и лаги компьютера
Добрый вечер, гуру компьютерных систем. У меня проблема, буквально позавчера компьютер...

Не грузится Windows после простоя компьютера
Доброго времени. Конфигурация: БП - AeroCool Kcas 500W Мать - ASUS P5Q SE Проц. - Intel...

Перезагрузки и зависания при включении компьютера после простоя.
Здравствуйте! Столкнулся с проблемой железа, пока не понятного конкретной причины. Ситуация...

22
Практикантроп
4824 / 2717 / 525
Регистрация: 23.09.2011
Сообщений: 5,777
22.08.2015, 09:18 2
.. может быть у вас на компе, когда он "постоит долго" диск останавливается? (Power options). Отсюда и 7 секунд на его разгон... .
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
22.08.2015, 09:22  [ТС] 3
Цитата Сообщение от nick42 Посмотреть сообщение
.. может быть
возможно. я думал об этом. но настройки все проверил - вроде все, как надо. а если с ресурсами попробовать? имеет смысл и поможет ли это?
0
Практикантроп
4824 / 2717 / 525
Регистрация: 23.09.2011
Сообщений: 5,777
22.08.2015, 09:29 4
Цитата Сообщение от Sergey_03 Посмотреть сообщение
а если с ресурсами попробовать
Несколько штук по 130 метров? Вы размеры программы после этого себе представляете?

Добавлено через 1 минуту
И по сути это ничего не даст. Из ресурсов программа берет данные опять-таки обращаясь к диску.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
22.08.2015, 09:34  [ТС] 5
ну вообщем да..спасибо.
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
07.09.2015, 23:15  [ТС] 6
Вынужден снова поднять данный вопрос. Не смертельно конечно, но может можно что то придумать. Тут даже простой не имеет значения - иногда открывается мгновенно, иногда пару секунд. Может есть какой то вариант ускорить это дело по максимуму? Карты 9000 на 6000 пикселей. Я как бы просто теперь знаю этот метод , но может есть свои тонкости?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
07.09.2015, 23:44 7
А что, обязательно именно TBitmap-ы хранить на диске и читать с диска? Чем меньше размер файла, который надо читать, тем быстрее (что логично) он будет прочитан, возможна элементарная замена Graphics::TBitmap на TPngImage (который есть и в RAD2009, я точно помню, что его использовал), и переконвертация bmp-файлов в формат png (при этом bmp-файл с картой размером 4 Мб сконвертировался в 80-килобайтный png, чем больше размер битмапа - тем больше будет сжатие, если только у тебя там схемы/карты, а не высококачественные фотоснимки, которые сжимаются гораздо хуже).

Естественно, 80Кб загрузится гораздо быстрее, чем 4000.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
07.09.2015, 23:51  [ТС] 8
У меня карты по 110-130 метров bmp. Я считал, что не важно в каком формате - все равно он из png будет преобразовываться в массив 9000 на 6000. То есть форматы - это как архиваторы. На выходе все равно 110-130 метров. Или это все не так работает? Поправьте, если можно.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
07.09.2015, 23:56 9
На выходе - это где? В памяти? Не надо скорость работы памяти сравнивать со скоростью чтения с диска. Просто попробуй.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
08.09.2015, 00:11  [ТС] 10
Попробовал - работает, но открывает ровно две секунды , не важно который раз - первый или десятый. Вообще странно. Действительно же по идее должно влиять. Работает он с ИЗО по распаковке уже в ОЗУ...Но png работает медленнее, чем bmp почему то.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
09.09.2015, 11:09 11
Что именно занимает 2 секунды? Создание TPngImage? Загрузка файла в TPngImage? Сама отрисовка изображения? Проверь время выполнения каждой из этих операций, как обычно, t = GetTickCount() перед проверяемой операцией, и отображение значения GetTickCount()- t после.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
09.09.2015, 22:53  [ТС] 12
Мне кажется, распаковка. Спасибо. Я попробую замерить и выложу результат.

Добавлено через 36 минут
Вот это занимает 2200-2400 миллисекунд.
C++
1
2
TPanel::map = new TPngImage;
                        TPanel::map->LoadFromFile(FN);
В файле .h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace Painted_Panel
{
    class TPanel : public Extctrls::TPanel
    {
        typedef Extctrls::TPanel Inherited;
    public:
        static TPngImage *map;
        __fastcall virtual TPanel(Classes::TComponent* AOwner)
            : Extctrls::TPanel(AOwner) {}
    protected:
        virtual void __fastcall Paint(void)
        {
            if(Tag==777)
            {
                Canvas->StretchDraw(this->ClientRect, map);
            }
            else Inherited::Paint();
        }
    };
    TPngImage *TPanel::map = 0;
};
#define TPanel Painted_Panel::TPanel


точнее вот это
C++
1
TPanel::map->LoadFromFile(FN);
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
10.09.2015, 10:38 13
Да, все-таки PNG грузится дольше битмапа, на больших изображениях - гораздо дольше, именно при загрузке происходит проход по всем чанкам, циклы и тому подобное. Битмап грузится быстрее, несмотря на то, что размер у него на порядки больше.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
15.09.2015, 22:52  [ТС] 14
Написал такую штуку в таймере - интервал 1000, таймер всегда включен.
C++
1
2
3
4
5
6
7
8
void __fastcall TForm26::Timer12Timer(TObject *Sender)
{
  String FN =L"C:\\VisMon\\1.bmp";
    if(FileExists(FN))
       {
           //
       }
}
Вообщем понятно, что это жесть, но работает. Грузится теперь не зависимо от простоя 50-120 млс. Может как то грамотно это можно сделать....
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
16.09.2015, 00:12 15
Sergey_03, постоянная подгрузка или что это такое?
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
16.09.2015, 00:19  [ТС] 16
ну как бы да..я просто заметил, что если комп простоит часов 5 - первый раз грузится долго, потом без проблем - подумал, может как то постоянно этот путь мониторить. Не придумать ничего другого...не знаю, можно так делать? или есть нормальный способ...
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
16.09.2015, 00:26 17
Эта овчинка выделки не стоит точно. Лучше потерпеть один раз подгрузку в 2 секунды, чем создавать такую избыточную нагрузку на дисковую подсистему.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
16.09.2015, 00:36  [ТС] 18
Проблема в том, что изначально задача данного приложения - оперативность реагирования на те или иные события в общем и быстрое открытие этой карты в частности. Не особое значение имеет скорость открытия после первого раза, в отличие от первого открытия. События может не быть сутками, потом оно наступает и приходится ждать открытия. Конечно это не критично, но все же как то не очень.
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
16.09.2015, 00:44 19
А диск, случаем, не отключается? Не знаю насчет всех и всяческих платформ, но вот на ноутах такая штука есть, как отключение питания жестких при отсутствии дисковой активности в течение некоторого времени.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
16.09.2015, 01:18  [ТС] 20
Вроде все проверил - план питания настроил. На стационарном проверял и на ноуте. Одно и тоже. В итоге попробовал создать постоянную дисковую активность. Может её можно создать не таким кривым способом?.. и попробую поставить таймер на 5 минут. Может тоже нормально будет.
0
16.09.2015, 01:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2015, 01:18
Помогаю со студенческими работами здесь

Долгая загрузка, после переустановки
Переустановил Windows 7, поставил все нужные драйвера и программы. Включаю компьютер на следующий...

После обновления долгая загрузка
Всем доброго времени суток! После последнего лбновления (27.12) стал ужасно долго включаться W10. У...

Долгая загрузка ОС после переустановки
У меня компьютер тормозил, долго включался. вообщем ужас. Я переустановил виндовс. 10ку....

Долгая загрузка системы, после обновления
Вчера Win 10 обновилась до 1803 и загружаться начала по 1.5-2 минуты, до обновления загружалась за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru