Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Подводные камни
  
О разделе

Список по категориям
Общий список

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  00:20[Войти] | [Зарегистрироваться]

Обсуждение материала
VCL.TBitmap.Утечка ресурсов в режиме 256 цветов
Полный текст материала


Другие публикации автора: Cepгей Poщин

Цитата или краткий комментарий:

«... При создании и разрушении изображений TBitmap в режиме 256 цветов происходит утечка памяти, что наблюдалось в windows 2000 и windows 98. ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.




Смотрите также материалы по темам:


Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 7

19-03-2006 14:45
сообщение от автора материала
Спасибо, что откликнулись, но вы кажется не прочитали комментарий в конце статьи и ошибка в TBitmap есть и будет есть, хотя для её исправления требуется более глубокий анализ. Да действительно удаление, как бы происходит, но не до конца. Чтобы в этом убедиться измените процедуру InternalDeletePalette.

procedure InternalDeletePalette(Pal: HPalette);
begin
  if (Pal <> 0) and (Pal <> SystemPalette16) then
    if not DeleteObject(Pal) then raiselastosError;  //Здесь ошибка
end;


Я могу предположить, что палитра остается выбраной в контексте устройства и по тому и не удаляется. В любом случае утечка памяти происходит всегда, в том числе в BDS 2006. Описанное поведение программы — это лишь побочный эффект, который зависит от видеокарты, ОС, драйвера и фазы луны. Таким образом, решение 2 остается в силе (особенно в свете увеличения размеров оперативки), а решение 1 может быть использовано с особой осторожностью в некоторых частных случаях, по крайней мере оно указывает на то, что проблема в поллитре.
Кстати, ни с этим ли связан тот факт, что в качестве иконок компонентов IDE {$R *.dcr} можно использовать только 4- и 24-битные изображения? Может найдется сподвижник, который напишит об этой проблеме в Borland, пока не поздно.
P. S. А что во-вторых?????
 Cep


17-03-2006 13:55
Во-первых, в классе TBitmap никаких ошибок нет и заменять  except на finally в предложенном месте нельзя!
Дескриптор палитры передаётся в функцию TBitmap.NewImage, где имеется код:

var
  Image: TBitmapImage;
begin
  Image := TBitmapImage.Create;
  with Image do
  try
    FHandle := NewHandle;
    FPalette := NewPalette;


То есть, дескриптор сохраняется в TBitmapImage и, соответсвенно, удаляется в момент уничтожения TBitmapImage. Соответсвующий код прописан в методе:


procedure TBitmapImage.FreeHandle;
begin
  if (FHandle <> 0) and (FHandle <> FDIBHandle) then
  begin
    DeselectBitmap(FHandle);
    DeleteObject(FHandle);
  end;
  if FMaskHandle <> 0 then
  begin
    DeselectBitmap(FMaskHandle);
    DeleteObject(FMaskHandle);
    FMaskHandle := 0;
  end;
  InternalDeletePalette(FPalette);  // << удаление палитры !!!
  FHandle := 0;
  FPalette := 0;
end;



Так что VCL тут совершенно не причём. Если бы проблема была именно в VCL, то НА ВСЕХ МАШИНАХ С Win98 ваша программа вела бы себя одинаково. Когда мне в своё время приходилось сталкиваться с подобными проблемами, то в 99% случаев проблемы были в ДРАЙВЕРЕ ДИСПЛЕЯ! То есть, после смены версии драйвера или замены его на стандартный из самой Windows 98 (если таковой был), проблема обычно исчезала. Этим же скорее всего объясняется разное поведение на разных машинах.


27-07-2005 02:37
сообщение от автора материала
Только мышь по экрану катается, а через некоторое время начинает хрюкать при перемещениях А у меня даже она умирала.
В Delphi 2005 после второго сервиспака, похоже, эта проблема устранена. Не знаю сами догадались, или прочли эту статью.
 Cep


16-07-2005 08:51
Утечки это не так уж страшно. А вот как добится полного зависания системы на Win98. (Правдо если установить Delphi то зависать перестаёт, но эффект всёравно странный)

Просто в цикле грузим Bitmap из файла (скажем из таймера раз в секунду или по нажатию кнопки) с помощью стандартной функции

bmp.LoadFromFile(FileName);

Если в bmp файлы из списка true color то всё нормально цыкл будет выполнятсы сколь угодно долго. но стоит попасться bmp 256 то после 2-х (иногда даже семь раз загружалось) виснит сам Windows причем наглухо. Только мышь по экрану катается, а через некоторое время начинает хрюкать при перемещениях.

Под WinXP такой проблеммы не наблюдалось.


28-02-2005 06:00
>> У меня, например, на кухне крыша тоже во время дождя протекает, это же не повод для ремонта крыши.

Я с вас балдею. Как это не повод??


22-02-2005 14:45
сообщение от автора материала
А чиво там проверять? Есть, однозначно. Вопрос: „насколько это опасно?”. Как я понимаю, библиотека в которой я предлагал сделать изменения существует неизменной уже не один год и, если то сих пор ни кого это не волновало, то переживать особенно не стоит. У меня, например, на кухне крыша тоже во время дождя протекает, это же не повод для ремонта крыши. Только при неудачном стечении обстоятельств, как в описанном выше случае может произойти зависание (которое, кстати, воспроизвести в маленьком примере неудалось).
 Cep


21-02-2005 07:54
В тему! Как раз работаю с 256-ицветными палитрами и восьмибитными битмапами. Сейчас проверю, нет ли у меня утечки.


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
"Мы с тобой одной крови — ты и я!". Чьи это заветные слова?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования