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

Вниз

Ресурсы GDI   Найти похожие ветки 

 
Германн ©   (2006-04-27 02:14) [0]

Формулирую сейчас ответ на запрос по доработке ПО от некоего клиента. В каком-то смысле его можно рассматривать как дистрибьютера. Сомнительно, но кто знает?
Так вот. Одна из его просьб однозначно потребует значительных ресурсов GDI. Win98 точно не справится.
У меня вопрос. Если кто сможет ответить "на лету". WinME стольже ограничен по ресурсам GDI как и 98?


 
Джо ©   (2006-04-27 02:28) [1]

> WinME стольже ограничен по ресурсам GDI как и 98?

А откуда ж у него возьмутся иные ограничения на количество объектов GDI? Ядро-то одно. Ставлю ИМХО, но очень удивлюсь, если оно пригодится.


 
Джо ©   (2006-04-27 02:29) [2]

П.С. Ох, как я не люблю эти ограничения, просто в печёнках сидят, хоть в XP, хоть в 95.


 
MBo ©   (2006-04-27 06:27) [3]

>Одна из его просьб однозначно потребует значительных ресурсов GDI
А что за просьба?


 
Котик Б   (2006-04-27 10:46) [4]

А може всётаки поделитесь степенью "значительности" ?


 
Игорь Шевченко ©   (2006-04-27 10:48) [5]


> WinME стольже ограничен по ресурсам GDI как и 98?


Да


 
Чапаев ©   (2006-04-27 10:50) [6]


> хоть в XP, хоть в 95.

А XP и прочих NT-based какие тебя ограничения ограничивают-то?


 
Игорь Шевченко ©   (2006-04-27 11:09) [7]

Чапаев ©   (27.04.06 10:50) [6]


> А XP и прочих NT-based какие тебя ограничения ограничивают-
> то?


Например, на количество Handles GDI и User...


 
Германн ©   (2006-04-28 02:18) [8]

2 Игорь Шевченко ©   (27.04.06 10:48) [5]
Спасибо.


> MBo ©   (27.04.06 06:27) [3]
>
> >Одна из его просьб однозначно потребует значительных ресурсов
> GDI
> А что за просьба?


Из уважения к Вам, Борис, отвечу.
Представьте себе набор графических отображений, которые представляют собой некие "поэтажные планы помещений". Причём для каждого этажа количество отображений - не ограничено. Количество и степень пересечений разных планов - тоже не ограничено. Каждое "отображение" - это BMP.
Далее, на каждом из этих "планов" размещены иконки неких датчиков.
А просит заказчик, чтобы он мог "управлять" неким набором датчиков щелчком мыши на плане. Т.е. на картинке.


 
Германн ©   (2006-04-28 02:21) [9]

Ошибочка вышла.

> Количество и степень пересечений разных планов

Я имел в виду не планы, а отображения.


 
Джо ©   (2006-04-28 02:43) [10]

А зачем их все сразу держать в виде BMP? Всё сразу пользователь и не увидит ведь. Сорри, если не так понял задачу.


 
Германн ©   (2006-04-28 02:43) [11]

Только не переонтируйте меня на ГИС, пожалуйста!


 
Ви   (2006-04-28 02:56) [12]

DerectX OpenGL по вкусу? А вообще то не понял суть проблемы если чесно :)


 
Ви   (2006-04-28 03:29) [13]

Эх, щас еще подумал, так и не смог представить ситуацию, в которой бы было недостаточно ресурсов. Ну есть БМП с картинкой плана этажа, на ней есть иконки устройств, при клике по иконке - действие, картинку можно увеличивать/уменьшать двигать туда сюда если вся не помещается на экран, а чего тут нахватает то? Контекст отображения один, ну и выводите последовательно картинки. А лучше сразу стройте полный план этажа на одном БМП с расстановкой иконок и его уже использовать для отображения на DC.
Или там все намного иначе, честно... если не трудно объясните ситуацию, когда нахватает ресурсов GDI. Просто я не сталкивался и сейчас вот попробовал представить, то же не получилось.


 
Германн ©   (2006-04-28 03:32) [14]


> Джо ©   (28.04.06 02:43) [10]
>
> А зачем их все сразу держать в виде BMP? Всё сразу пользователь
> и не увидит ведь. Сорри, если не так понял задачу.


А причём тут BMP?
"Сорри, если не так понял ответ." :-)


 
Ви   (2006-04-28 03:34) [15]

Германн
а что причем?


 
Германн ©   (2006-04-28 03:37) [16]


> Ви   (28.04.06 03:29) [13]
>
> Эх, щас еще подумал, так и не смог представить ситуацию,
>  в которой бы было недостаточно ресурсов. Ну есть БМП с
> картинкой плана этажа, на ней есть иконки устройств, при
> клике по иконке - действие, картинку можно увеличивать/уменьшать
> двигать туда сюда если вся не помещается на экран, а чего
> тут нахватает то? Контекст отображения один, ну и выводите
> последовательно картинки. А лучше сразу стройте полный план
> этажа на одном БМП с расстановкой иконок и его уже использовать
> для отображения на DC.
> Или там все намного иначе, честно... если не трудно объясните
> ситуацию, когда нахватает ресурсов GDI. Просто я не сталкивался
> и сейчас вот попробовал представить, то же не получилось.
>
>


Когда сталкнёшься, узнаешь!


 
Джо ©   (2006-04-28 03:39) [17]

> если не трудно объясните ситуацию, когда нахватает ресурсов
> GDI.

Да самое плохое в этом не то, что их (допустим) мало. А в том, что это ограничение распространяется на всю систему. Т.е, не каждому приложению — столько-то, а просто на всю систему столько-то и не больше. В 95-98 бывала из-за этого беда: невозможно было работать с несколькими одновременно запущенными копиями некоторых программ — нехватка ресурсов GDI (перья, кисти, курсоры, например). И хоть тресни :0)


 
Джо ©   (2006-04-28 03:40) [18]

Т.е, любое приложение может захапать под себя все ресурсы и — финиш. Дурацкая реализация, имхо.


 
Ви   (2006-04-28 03:43) [19]

Удалено модератором


 
Ви   (2006-04-28 03:47) [20]

Удалено модератором


 
Германн ©   (2006-04-28 03:51) [21]


> Ви   (28.04.06 03:43) [19]
>
> хыыыыыы, ну куда уж мне...
> Так значит, суть проблемы так и не будет озвучена? Не обижайся,
>  но пока кажется, что работодатель - дистрибьютор лоханулся.
>  ))))))))))))))))))))
>


Нет. Не в этом суть проблемы.
Читай Р. Шэкли.
На первый случай - "Координаты чудес". Далее посмотрим, что тебе посоветовать. :-)


 
имя   (2006-04-28 04:01) [22]

Удалено модератором


 
Джо ©   (2006-04-28 04:10) [23]

Вечер художественного анонимного монолога?


 
Германн ©   (2006-04-28 04:18) [24]


> Ничего личного.

Про "Ничего личного" с удовольствием поболтаю. Как только, так сразу!

Как только ты зарегистрируешься на форуме.
До тех пор - лопай, что дают!
Кстати, насчёт "лопай". Я предлагаю только высококачественные продукты!
Так что Шэкли уж почитай! Пойдёт только на пользу.


 
имя   (2006-04-28 04:20) [25]

Удалено модератором


 
имя   (2006-04-28 04:29) [26]

Удалено модератором


 
Джо ©   (2006-04-28 04:42) [27]

Понимаешь, есть ресурсы реальные, "данные нам самой жизнью", так сказать. К таковым можно, например, отнести объем оперативной памяти или устройства ввода. Как ни странно, с применением достаточно хитроумных алгоритмов современные многозадачные ОС достаточно хорошо справляются с задачей конкуррентного их использования (в пределах возможного, конечно). Т.е, ОС практически безразлично, сколько программ в данный момент пользуются ОДНОЙ клавиатурой или ОЗУ.
А есть ресурсы фиктивные, выдуманные. Например, параметр FILES в MS-DOS, задаваемый в config.sys и определяемый (если склероз не изменяет) кол-во одновременно открытых файлов. К таким же можно отнести выдуманное (и практически ни чем не ограниченное) ограничение на общесистемное кол-во объектов GDI или User. Вот в таком роде.


 
Аффтар жжгу (Ви)   (2006-04-28 04:55) [28]

Удалено модератором


 
Джо ©   (2006-04-28 05:00) [29]

Я не понимаю подросткового жаргона.


 
Ви   (2006-04-28 05:49) [30]

Удалено модератором


 
Думкин ©   (2006-04-28 06:01) [31]

> Германн ©  

Если честно, то я тоже не понял суть проблемы.
С нехваткой ресурсов сталкивался, но в данной задаче пока вижу только искусственные пути которые смогут привести к ней - при решении именно этой задачи. Если вы конечно хотите замостить весь экран маленькими окнами - ....


 
Думкин ©   (2006-04-28 06:04) [32]

> Аффтар жжгу (Ви)   (28.04.06 04:29) [26]

В 98 этого достичь почти легко. Ряд тяжелых приложений и вы приплыли. Но вот создать одно приложение, которое могло бы так сделать - тут мастерство надо. Но тем не менее случалось. Приходилось изображать Роденовскую скульптуру и уходить от такого.


 
Джо ©   (2006-04-28 06:05) [33]

> [32] Думкин ©   (28.04.06 06:04)
> В 98 этого достичь почти легко. Ряд тяжелых приложений и
> вы приплыли.

Вот и я о том же. Плавали :)


 
Ви   (2006-04-28 06:06) [34]

Удалено модератором


 
MBo ©   (2006-04-28 06:07) [35]

>Германн
Что именно вызывает нехватку ресурсов?
Например, если это обуславливается большими битмапами, то их нужно в виде DIB, а не DDB иметь, если количеством битмапов  - то не стоит их все держать в памяти, а подгружать из файлов или из БД и т.д.
Понятно, что это общие слова, но зачастую нехватка ресуросов как раз и связана с тем, что чего-то простого не учли...


 
MBo ©   (2006-04-28 06:08) [36]

>то поди TBitmap. Если так то я ему посоветовал бы иметь дело с API все же, а не юзать VCL компоненты.

Можешь обосновать?


 
Джо ©   (2006-04-28 06:10) [37]

> то я ему посоветовал бы иметь дело с API все же, а не юзать
> VCL компоненты.

API — панацея от всех бед, привнесенных ужасным VCL?


 
Ви   (2006-04-28 06:30) [38]

MBo ©   (28.04.06 06:08) [36]
В данном случае или вообще?


 
Ви   (2006-04-28 06:37) [39]

Удалено модератором


 
Ви   (2006-04-28 06:47) [40]

Удалено модератором


 
Юрий Зотов ©   (2006-04-28 07:20) [41]

Иногда встречаются люди, которые искренне считают, что если они не видели носорога, то его и не существует. Даже и теоретически.

А все рассказы о нем - брехня. И рисунки - тоже брехня. Просто художник рисовать не умеет, про освобождение контекста даже и не слышал никогда, вот ему глюки и привиделись.


 
КаПиБаРа ©   (2006-04-28 07:58) [42]

Если ресурсов не хватает, то не надо их использовать!


 
Котик Б   (2006-04-28 10:18) [43]

> Юрий Зотов ©   (28.04.06 07:20) [41]
> Иногда встречаются люди, которые ...

хммм... к чему бы это ???

Поскольку автор вопроса так и не озвучил конкретные потребности своей супер навороченной системы (ни одной цифирки !!!), то я набрался наглости и провел у себя маленький тестик:

procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
 dc: THandle;
 hbmp: array of THandle;
begin
 SetLength(hbmp, MaxInt div $FF);
 dc := GetWindowDC(self.Handle);
 if dc <> 0
 then try
   for i := Low(hbmp) to High(hbmp) do begin
     hbmp[i] := CreateCompatibleBitmap(dc, 0 + (i mod 2), 0 + (i mod 2));
     Label1.Caption := IntToStr(i);
     Label1.Update();
     Application.ProcessMessages();
     if hbmp[i] = 0
     then break;
   end;

   for i := Low(hbmp) to High(hbmp) do begin
     DeleteObject(hbmp[i]);
     if hbmp[i] = 0
     then break;
   end;
   ShowMessage(Label1.Caption);
 finally
   ReleaseDC(self.Handle, dc);
 end;
 SetLength(hbmp, 0);
end;


и получил такие результаты:
Win98: 2463
Win2kP: 28285
Win2kS: 30117

как и ожидалось в Win98 получили мизерный результат - но всё равно для условия заданного в
>Германн ©   (28.04.06 02:18) [8]
>Причём для каждого этажа количество отображений - не ограничено.
>Количество и степень пересечений разных планов - тоже не ограничено

будет маловато и 28 тыщ :(
При этом любая современная игрушка спокойно может отображать до 100 000 полигонов в кадре.
Поэтому я полностью согласен с Ви(без копирайта) по поводу использования других API и мне стыдно за товарища Германн © позволяющего себе в его возрасте такие высказывания вроде "Когда сталкнёшься, узнаешь!"...

DIXI


 
wicked ©   (2006-04-28 11:22) [44]


> При этом любая современная игрушка спокойно может отображать
> до 100 000 полигонов в кадре.
> Поэтому я полностью согласен с Ви(без копирайта) по поводу
> использования других API и мне стыдно за товарища Германн
> © позволяющего себе в его возрасте такие высказывания вроде
> "Когда сталкнёшься, узнаешь!"...

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

по теме - ув. Германн, возможно я плохо читал ветку, но озвучьте, пожалста, как сейчас происходит (или планируется) отображение этих битмап.... тогда можно будет и думать.....
из простого, как бы я делал - хранить "сырые" битмапы в памяти (bmp-файлы) и отображать их с помощью StretchDIBits.... это я делал и оно работает, нужно просто передавать в функцию два указателя, а она уже сама отобразит и сконвертирует различные форматы пикселей.... при этом из ресурсов тратится только память, а у GDI берется только контекст устройства и хендл на 1 - 2 битмапы для кеширования..... то есть, мы экономим на ресурсах GDI за счет небольшого снижения быстродействия....
ежели охота и позволяет время, можно побаловаться с функциями из раздела "Bitmap functions", которые в названии имеют DIB - часть из них - именно то, что нужно в таком случае......


 
wicked ©   (2006-04-28 11:23) [45]

добавлю, что, возможно, в GDI+ с этими вещами будет проще, но тут я не могу ничего сказать.... а вот Джо попытать на эту тему надо..... :)


 
Альф   (2006-04-28 12:03) [46]

Удалено модератором
Примечание: Правила читаем и уважаем


 
antonn ©   (2006-04-28 12:50) [47]

Германн ©   (28.04.06 2:18) [8]
+ с этими вещами будет проще, но тут я не могу ничего сказать.... а вот Джо попытать на эту тему надо..... :)

хм... мне показалось, или там говорилось об VCL, где каждый датчик - что то типа TImage?
Ну допустим должен отображаться план этажа, сотни полторы датчиков. Ну, допустим, план составляется из нескольких битмапов. Итого, нужен буферный битмап, который будет представлять собой выводимую картинку, нужен минимум один "tmp" битмап для картинки датчика, и еще один битмап-маска, по размеру равный буферному.
Итак, очищается буферный битмап(и на него копируются части плана - ну 1-2 дополнительных битмапа, которые потом умирают) и маска, на них, по очереди копируются картинки-датчики (для этого используются "tmp" битмап - в него грузим с диска(или "байтового" массива в памяти) и выводим). Буферный битмап (или часть его) отображается пользователю. Маска используется для кликов по датчикам (даже через canvas.pixels[] хватит, координаты клика-то можно определить?), а при рисовании датчика на маску можно использовать цвет, равный номеру в массиве(или индекс в базе, да мало ли...). При клике номер датчика = canvas.pixels[]. Сколько там у TColor может быть вариантов? Думаю на датчики хватит:)

Я, вообще, правильно понял мысль? с таким подходом и на Win98 работать будет, и не в одном экземпляере. Если битмапов и много, их можно хранить в вариантах TStream - TMemoryStream будет кушать память, но за то из памяти и читать... но зачем их сразу все создавать?


 
Sapersky   (2006-04-28 13:16) [48]

хранить "сырые" битмапы в памяти (bmp-файлы) и отображать их с помощью StretchDIBits.... это я делал и оно работает, нужно просто передавать в функцию два указателя

А если не хочется вручную возиться со StretchDIBits/указателями - можно использовать TFastDIB с UseGDI = False.

http://prdownloads.sourceforge.net/skinner/FastLib.zip?download


 
Джо ©   (2006-04-28 13:22) [49]

> [46] Альф   (28.04.06 12:03)
> Що до GDI+, то дуже сумнiвне використання його на Win98
> - дуже багато прив"язано до NT-подiбних систем.

GDI+ отлично работает на 98.


 
Юрий Зотов ©   (2006-04-28 14:31) [50]

> Котик Б   (28.04.06 10:18) [43]

> хммм... к чему бы это ???

К тому, что Вы сами своими тестами и подтвердили - носороги таки существуют, даже если некто с ними еще не сталкивался (см. [13]).

А раз они существуют, то считаться с ними приходится. Каким способом - это уже второй вопрос. Может, логику программу перекроить. Может, другой API использовать. Может, еще что. От многих факторов зависит (например, от сроков, от имеющихся сил, от потребителя, от способа дистрибьюции, от перспектив и т.д.). На месте виднее.

Но в чем можно не сомневаться - так это в том, что о необходимости освобождения ресурсов автор сабжа где-то когда-то слышал. Причем далеко не один раз. Так что вряд ли стоило столь назидательно, с издевочкой, объяснять ему эту самую необходимость.


 
Котик Б   (2006-04-28 16:21) [51]

>Юрий Зотов ©   (28.04.06 14:31) [50]
>К тому, что Вы сами ...

Понял :) вопросов больше не имею :)

Но чего хотел добиться от автора - так это реальных требований к кол-ву выделяемых ресурсов, что-то отличное от "не ограничено".

А также хотел показать то что разница в кол-ве GDI handles не такая уж и большая...


 
han_malign ©   (2006-04-28 17:11) [52]

Delphi Help:
Dormant method (TBitmap)
----------------------------------------------
Creates a memory bitmap image in order to release the bitmap handle, forcing the image into DIB format to save resources.

sapienti sat


 
Ви   (2006-04-28 21:13) [53]

Удалено модератором
Примечание: Отдохни от форума недельку


 
Германн ©   (2006-04-29 02:34) [54]

Даже не ожидал, что мой весьма отвлечённый вопрос вызовет столь бурное обсуждение.

Спасибо всем. Получил массу информации. Сохранил её. Может пригодится когда-нибудь.
К сожалению, самые грамотные советы, мне полезны только теоретически. :(
Поскольку ведут к весьма существенной и времятрудоёмкой переработке программы. А оплатить эту переработку клиент, скорее всего не захочет.


 
Ви+   (2006-04-29 04:47) [55]

>>Удалено модератором
>>Примечание: Отдохни от форума недельку
Модератор жжош, я тут бываю раз в месяц и то случайно
Аффтар выпий яду, да побольше и иди лучше картошку капай, такого ламеризма я еще не видел.


 
Ви+   (2006-04-29 04:50) [56]

Юрий Зотов ©   (28.04.06 07:20) [41]
Народ, знай что аффтор сабжа показал свою некомпетентность и пытался скрыть сей постыдный факт.  )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) Я заклеймил его пазором гыыыыыыыыыыыыыыы


 
Ви+   (2006-04-29 04:52) [57]

ЗЫ: про Юрий Зотов по запарке, наверное чет ему хотел написать. А пост адресуется аффтору сабжа.


 
homm ©   (2006-04-29 05:57) [58]


>  [55] Ви+   (29.04.06 04:47)

На рекорд батенька идете. Помоему около четырех правил нарушено :)

1) оскорбил другово участника форума
2) "обсудил" действия модератора
3) написал сообщение не по теме оффтоп
4) справоцировал другого участника на оффтоп (меня :) )



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

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

Наверх




Память: 0.61 MB
Время: 0.011 c
10-1120033112
supervk
2005-06-29 12:18
2006.05.28
Позиция текста в TWordDocument или TWordApplication


15-1146744905
Golik
2006-05-04 16:15
2006.05.28
Как создать резервную копию БД ?


2-1147371555
Призрак
2006-05-11 22:19
2006.05.28
Как организовать FIFO-буфер?


2-1147159577
romychk
2006-05-09 11:26
2006.05.28
Не открывается файл Paradoxa.А он очень нужен есть ли аналог DBED


15-1146261312
lookin
2006-04-29 01:55
2006.05.28
Skype никто не желает?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский