Засада! Патч от Microsoft!
От: GIS developer Россия http://www.isoline-gis.ru/autors.htm
Дата: 04.03.08 08:45
Оценка:
Примерно неделю-две назад стали сыпаться претензии от клиентов.
В моей программе не отображаются картинки.
Стал искать проблему — обнаружил следующее:

Если картинки большие 2500*2000, то программа не может создать Bitmap-ов более 7 штук, то есть занять памяти более 100-110 МБ. Если картинки маенькие, то количеством больше, но общий предел остается!
Раньше такого не было. Не поню сколько было можно занять памяти под Bitmap-ы, но никто не сталкивался ни с какими ограничениями. Особенно в 100 МБ!

Программой моей пользуются куча народу уже 8-9 лет.
Я грешу на последние патчи от Microsoft.
Народ! Кто, что знает и думает по этому поводу?

04.03.08 16:22: Перенесено модератором из 'О жизни' — Хитрик Денис
05.03.08 11:33: Перенесено модератором из 'WIN API' — Odi$$ey
Re: Засада! Патч от Microsoft!
От: Кодёнок  
Дата: 04.03.08 08:59
Оценка:
Здравствуйте, GIS developer, Вы писали:

GD>Народ! Кто, что знает и думает по этому поводу?


Поди пользуешься CreateCompatibleBitmap, и не знаешь, что надо было использовать CreateDIBSection?
Re: Засада! Патч от Microsoft!
От: Lao Украина  
Дата: 04.03.08 21:10
Оценка:
Здравствуйте, GIS developer, Вы писали:

GD>Стал искать проблему — обнаружил следующее:


GD>Если картинки большие 2500*2000, то программа не может создать Bitmap-ов более 7 штук, то есть занять памяти более 100-110 МБ. Если картинки маенькие, то количеством больше, но общий предел остается!

GD>Раньше такого не было. Не поню сколько было можно занять памяти под Bitmap-ы, но никто не сталкивался ни с какими ограничениями. Особенно в 100 МБ!

GD>Народ! Кто, что знает и думает по этому поводу?


Подобное было. Под .net что-то делал с картинками. Использовал Bitmap. Столкнулся с таким ограничением, что не хотел создаваться bitmap больше определенного количества точек. Уже не помню сколько там было. Почему оно так — не разбиралься, т.к. не критично было.
Re: Засада! Патч от Microsoft!
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 05.03.08 06:29
Оценка:
GD>Если картинки большие 2500*2000, то программа не может создать Bitmap-ов более 7 штук, то есть занять памяти более 100-110 МБ. Если картинки маенькие, то количеством больше, но общий предел остается!
GD>Раньше такого не было. Не поню сколько было можно занять памяти под Bitmap-ы, но никто не сталкивался ни с какими ограничениями. Особенно в 100 МБ!

GDI+ спасет отца русской демократии. Особенно если печатать (на принтер) ничего не нужно, или печатать надо только растр. У меня под GDI+ более-менее шуршат картинки порядка 8000x6000x32.

Ну и, конечно, если на картинки не надо рисовать векторные примитивы, то вполне можно и вручную с битмапцами работать...

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re: Засада! Патч от Microsoft!
От: Аноним  
Дата: 05.03.08 07:05
Оценка:
Здравствуйте, GIS developer, Вы писали:
GD>Программой моей пользуются куча народу уже 8-9 лет.
GD>Я грешу на последние патчи от Microsoft.
GD>Народ! Кто, что знает и думает по этому поводу?

Feng Yuan, Windows Graphics Programming Win32 GDI and DirectDraw®

Note the difference between pixel array memory allocation for a DDB and a DIB section. A DDB's pixel array is allocated from GDI's heap in Windows 95-based systems, and from kernel mode paged-pool in Windows NT-based systems. They use shared-system resources with limited capacity <...> In contrast, a DIB section's pixel array is allocated from the current application process's virtual memory space, which is only limited by an application's virtual memory space and free hard disk space...

Re[2]: Засада! Патч от Microsoft!
От: GIS developer Россия http://www.isoline-gis.ru/autors.htm
Дата: 05.03.08 08:24
Оценка:
Кё>Поди пользуешься CreateCompatibleBitmap, и не знаешь, что надо было использовать CreateDIBSection?

Да, так и есть. Я уж и забыл про эту разницу.
У DIB никаких проблем. Только скорость отрисовки чуть-чуть меньше.
Почему только раньше проблема не заметна была так и не понял.
Re: Засада! Патч от Microsoft!
От: Аноним  
Дата: 05.03.08 09:59
Оценка:
Здравствуйте, GIS developer, Вы писали:

GD>Примерно неделю-две назад стали сыпаться претензии от клиентов.

GD>В моей программе не отображаются картинки.
GD>Стал искать проблему — обнаружил следующее:

GD>Если картинки большие 2500*2000, то программа не может создать Bitmap-ов более 7 штук, то есть занять памяти более 100-110 МБ. Если картинки маенькие, то количеством больше, но общий предел остается!

GD>Раньше такого не было. Не поню сколько было можно занять памяти под Bitmap-ы, но никто не сталкивался ни с какими ограничениями. Особенно в 100 МБ!

GD>Программой моей пользуются куча народу уже 8-9 лет.

GD>Я грешу на последние патчи от Microsoft.
GD>Народ! Кто, что знает и думает по этому поводу?

А ты не пробовал испол. CreateDIBSection, он ведь может создавать собственные виртуалку.
Re[3]: Засада! Патч от Microsoft!
От: Anatoliy.Sviridenkov Россия  
Дата: 05.03.08 12:28
Оценка:
Здравствуйте, GIS developer, Вы писали:

Кё>>Поди пользуешься CreateCompatibleBitmap, и не знаешь, что надо было использовать CreateDIBSection?


GD>Да, так и есть. Я уж и забыл про эту разницу.

GD>У DIB никаких проблем. Только скорость отрисовки чуть-чуть меньше.
GD>Почему только раньше проблема не заметна была так и не понял.

Разница в памяти для рисунка, видео или общая. Если раньше не сталкавилсь раньше значит вам просто везло.
Re[2]: Засада! Патч от Microsoft!
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 06.03.08 07:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А ты не пробовал испол. CreateDIBSection, он ведь может создавать собственные виртуалку.


В общем-то, моя практика показывает, что после определенного размера изображения CreateDIBSection точно так же успешно обламывается. Где-то на 6000x6000x32 примерно Зависит от машины...

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[3]: Засада! Патч от Microsoft!
От: Кодёнок  
Дата: 06.03.08 07:13
Оценка:
Здравствуйте, Slicer [Mirkwood], Вы писали:

SM>В общем-то, моя практика показывает, что после определенного размера изображения CreateDIBSection точно так же успешно обламывается. Где-то на 6000x6000x32 примерно Зависит от машины...


Интересно. А обламывается создаваться или рисоваться?
Re[4]: Засада! Патч от Microsoft!
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 06.03.08 11:32
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Интересно. А обламывается создаваться или рисоваться?

К сожалению, уже не помню, полгода прошло как заборол это... По-моему, с какого-то достаточно большого размера переставало рисоваться, а при дальнейшем увеличении до примерно 100-150 Мб переставало и создаваться. С GDI+ таких проблем пока еще не возникало.
Но вообще будет проще интересующимся написать тестовое приложение из 15 строк, чем мне сейчас шерстить всю рассылку на нашу службу сопровождения в поисках моего письма по результатам отладки

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[5]: Засада! Патч от Microsoft!
От: GIS developer Россия http://www.isoline-gis.ru/autors.htm
Дата: 31.03.08 13:13
Оценка:
Докопался до следующего:

CreateCompatibleBitmap имеет общую память на все приложения, поэтому, когда я съел весь резев своей программой другие приложения перестали работать.
Зависит это не от Windows а от драйвера. После обновления драйвера и проявился этот прикол.
Re: Засада! Патч от Microsoft!
От: vdimas Россия  
Дата: 02.04.08 18:42
Оценка:
Здравствуйте, GIS developer, Вы писали:


GD>Если картинки большие 2500*2000, то программа не может создать Bitmap-ов более 7 штук, то есть занять памяти более 100-110 МБ. Если картинки маенькие, то количеством больше, но общий предел остается!


А вот зачем создавать такие большие битмапы в таких кол-вах?
Можно хранить просто массивы точек и работать с ними, а битмап нужен только в момент рисования и не более по размерам, чем отображаемая область. У себя я так и делаю, использую GDI+, а синхронизирую области своего in-memory изображения и вспомогательного GDI+ битмапа через LockBits/UlockBits, аналогично можно делать для GDI.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.