Здравствуйте. Вот задался вопросом — как корректно сохранять историю в графическом редакторе (как Гимп) для использования в UNDO/REDO. Сам вижу три варианта:
1. Сохранять список действий.
Например, нарисовал линию такого-то цвета в таких координатах, применил фильтр «Блур», повернул изображение. В случае использования UNDO проходятся все действия от первого до необходимого. Преимущество: Занимает очень мало места в памяти. При сохранении проекта можно с легкостью восстановить всю историю. При желании можно даже хранить полное дерево (например сделали действие A, B, C, D, E, вернулись к С, сделали F, G. Итоговый путь получился ABCFG, но можно как в системе контроля версий сохранить и ветку DE) Недостаток: При использовании Undo или загрузке ранее сохраненного изображения проходится весь путь, а это может играть существенное время и если при обычном простом редактировании такой проход может занять каких-то 100-200 мс, что некритично, так при использовании тяжелых фильтров может замедлиться до десятков секунд.
2. Сохранять полный дамп проекта в bitmap
Каждое действие всю картинку мы сохраняем в память как готовый рисунок. Преимущество: Очень быстро работает. Сделали undo/redo и просто показали из памяти тот рисунок, который у нас был (уже отрендеренный). Даже тяжелый фильтр, что угодно. Недостаток: Занимает очень много места в памяти. Допустим, у нас рисунок размером 1k*1k. В каждом пикселе мы храним 32 бита информации (по 8 бит на r,g,b и 8 бит на альфаканал), то есть 4 байта, то есть такой битмап у нас будет занимать в идеале 4 метра, а история из 64 действий — 64*4 = 256 мб в памяти. А если допустить, что у нас графический редактор поддерживает слои и пусть их будет хотя бы пять… Аналогично, проекты с историей хранить тяжело.
Gimp
В Гимпе по косвенным признакам я опеределил, что используется второй подход. Признаки такие:
1. История ограничена
2. Тяжелые фильтры при ундо-редо возвращают статус кво очень быстро.
3. Совмещенный подход
Конечно, есть альтернатива. Храним историю первым способом, а последних, например, 8 действий храним вторым способом, т.к. редко используется такой дальний undo. Сохранять на винт можно только действия, из-за чего проект с множеством изменений будет долго открываться, но допустимо весить. Или еще добавить последнюю битмап дату. Преимущества обоих подходов Недостаток — значительно утяжеляется логика приложения. Фактически — надо реализовывать два механизма истории.
Тема для обсуждения
Что скажете вы? Может, есть еще какой-то подход. Если нет, то какой из подходов предпочли бы вы (в идеальном случае и в случае очень сжатых сроков)? Почему?
Есть некая программа, которая при работе вызывает консольное приложение. Нужно определить размер памяти, который занимает консольное приложение при работе.
Гуглил, ничего толкового не нашел. Какие-то обрывки везде… Возможно, плохо искал.
Подскажите функцию/процедуру, которая может определить количество памяти. Ну или ссылку на код (главное, чтобы суть была понятна). Желательно на Delphi/C++.
Больше ничего не стал писать в заголовок, надеюсь, железячники и так сюда попадут.
Где-то слышал или видел pci-плату с ddr-разъемами, которая работает как обычный ЖД. Интересует название сабжа и сравнение с ssd, если есть.
Имеется в наличии ноутбук Lenovo ThinkPad Edge 14 (NVP3WRT), на борту у которого 2 гига оперативки (Hynix DDR3 PC-8500). В связи с нехваткой памяти, я решил докупить ещё одну планку (Samsung DDR3 PC-10600). Пришёл домой, поставил, включаю комп — разрешение 640х480. Чуть позже выяснилось, что видеокарта (Mobility Radeon HD 5145) просто пропала из диспетчера оборудования — раздела «Видеоадаптеры» нет совсем, HDMI-звуковой выход тоже пропал. Винда пишет: «Память: 4,00 ГБ (Доступно 3,86 ГБ)» (ось — 7 HP x64)
В общем, опытным путём было выяснено, что любая планка поодиночке работает нормально. Если вставляю обе (менять местами тоже пробовал) — при загрузке нет видяхи. Единственная зацепка — «разнокалиберность» памяти. Еду в магазин, нахожу продавца-консультанта, с которым советовался насчёт памяти и у которого купил самсунговскую планку, без проблем — он выносит мне ещё одну планку (Kingston DDR3 PC-8500), дабы потестировать планки одинаковой частоты. Вставляю прямо в магазине — то же самое: поодиночке — все работают, в любых попарных комбинациях — нет (вернее, работают, но прячут видяху).
Завтра понесу комп в сервис-центр, но предварительно хотелось бы узнать, вдруг кто-то сталкивался с такой проблемой, ибо боюсь, что комп заберут для опытов, а мне бы не хотелось с ним расставаться. У меня осталось два варианта — программный косяк в биосе, или аппаратный в материнке / чипсете.
Приветствую. Раз в месяц вываливается BSOD Memory_Managment, memtest ничего не нашёл. Память: DDR3 PC10666 6GB Corsair XMS3 3X2048 TR3X6G1333C9 CL9 х2 (12gb) Процессор: core i7 920 Bloomfield
В последнее время я вплотную сижу в After Effects который сжирает почти весь RAM и всякие BSOD повалились чаще (спасибо наработанному рефлексу ctrl+S каждые 5 минут). Сейчас я не могу закончить нормально проект по монтажу из-за этого, поэтому прощу помощи у вас, потомучто мне нужно решение как можно быстрее.
Вчера я начал конкретно напрягаться по этому поводу и обнаружил в описании своей памяти частоту 1333, а core i7 поддерживает 800 — 1066, и меня вроде осенило что может быть проблемой, но теоретической базы (в случае с RAM она стремится к нулю) у меня мало в этом деле. При этом тайминги везде в описании этих планок написаны 9-9-9-24, но cpu-Z показывает 8-8-8-20,
в BIOS показывается так:
8-8-8-20-4-59-8-6-20-0
2N-51-52-54
5-5-14-10-10-10-7-6-4-7-7-4
у меня вообще складывается такое ощущение что BIOS (версия последняя) автоматически снизила частоту памяти до 1066 и тайминги до 8-8-8-20, но от этого мне не радостней, потомучто тогда путей избавится от BSOD я не вижу. Нужно ли мне вручную выставлять 1066, вольтаж 1.5, и тайминги 9-9-9-24?
p.s.: я уже прочитал про всемирную славу corsair по поводу bsod, но прежде чем советовать сменить память, давайте попробуем разобраться с этой, ибо времени и денег сейчас на это нету, а проект очень хочется закончить.