|
2/03/2009Здравствуйте! Как вы можете знать из моего блога, в настоящее время я работаю над подсистемой показа двумерных тайловых карт в DynamicDataDisplay. Чтобы понять, насколько успешно продвигается разработка и достаточно ли хорошими и производительными получаются карты, я решил провести небольшой стресс-тест. Кроме того, незадолго до этого я изменил кэш хранения загруженных тайлов в памяти, изменив все ссылки на сохраненные тайлы на слабые (WeakReference), которые могут при необходимости быть собранными сборщиком мусора. Это изменение стало второй причиной, по которой я хотел провести стресс-тест – мне надо было понять, эффективно и правильно ли работает такой кэш, действительно ли память, занятая тайлами, освобождается, когда тайлы становятся больше не нужными. Вот в чем этот стресс тест заключался: Перейдя на шестой уровень тайлов в Virtual Earth Road, я увеличивал размер отображаемой области до тех пор, пока все не стала видна вся поверхность земли. Тут стоит заметить, что 6 уровень по горизонтали и по вертикали 2^6 = 64 тайла, значит всего в этом уровне 64*64 = 4096 тайлов. Постепенно все эти тайлы были скачаны в кэш на жестком диске, занимая на нем около 70 мегабайт, и одновременно они ВСЕ находились в кэше в оперативной памяти. Проведем небольшой расчет – каждый тайл имеет размер 256 на 256 пикселей, в WPF, как мы знаем, каждый пиксель описывается 32 битами (ARGB), то есть 4 байтами. Получается, в памяти в несжатом виде один тайл занимает 256*256*4 = 262144 байт, т.е. 256 килобайт. Всего тайлов было 4096, значит весь кэш занимал, без учета служебной информации, не менее 256 кбайт * 4096 тайлов = 1024 мегабайт! Один гигабайт в памяти! Напомню, что тестирование проводилось на компьютере со следующей конфигурацией – двухъядерный Intel Core 2Ghz, 2 Gb ОЗУ, встроенное видео Intel 945, Windows 7 Beta. При такой нагрузке на память все приложение занимало около 1,3 гигабайта в ОЗУ:
На приведенном изображении границы отдельных тайлов различимы, поэтому вы можете убедиться, что все изображение состоит действительно из 4096 тайлов. При такой загрузке передвижение карты происходило, конечно, с небольшими затруднениями, но, тем не менее, работать с картой можно было достаточно комфортно. Интересно узнать, какой размер такой мегатекстуры в пикселях? Разрешение каждого тайла – 256*256px, по одной стороне мегатекстуры идет 64 тайла, значит, каждая сторона большой текстуры состоит из 256*64 = 16384 пикселей! А общее разрешение – 256 мегапикселей! Не часто в обычной жизни мне, по крайней мере приходилось работать с изображениями такого размера. И даже в столь трудной ситуации WPF проявило себя с лучшей стороны, без сбоев и неполадок отобразив и позволив работать с таким огромным изображением. Думается, если запастись более мощной видеокартой, можно будет отображать в D3 изображения и большего размера. Чтобы вы могли легче представить себе размер мегатекстуры, я приведу ее же, но не на большом удалении, а в приближении, близком к 1:1:
Мегатекстура содержит всю Землю в подобной детализации. Как показал этот тест, кэш в памяти также отработал хорошо – приведенный ниже график потребления памяти показывает, что память была освобождена после переключения на более низкий уровень тайлов (этот скриншот был снят не для отображения 6-го уровня, поэтому значения потребления памяти в нем другие, нежели описанные выше): 
2/03/2009Здравствуйте! Я записал видео, просмотрев которое вы сможете увидеть ранний прототип двумерных карт в DynamicDataDisplay и получить представление, как этот прототип работает. Оригинал видео в разрешении 800x600 можно скачать, если переместиться в нижнюю часть страницы и найти секцию Download (внизу справа). Размер видео – около 21 Мбайта. Приятного просмотра! 2/03/2009Здравствуйте! В последнее время я работал над созданием в DynamicDataDisplay подсистемы отображения двумерных карт, представленных в виде отдельных тайлов. Вам хорошо знакомы такие карты – в последнее время они получили широкое распространение в интернете: достаточно вспомнить Google Maps или более знакомые некоторым из нас (Никита, привет!) Microsoft Virtual Earth. Давайте представим, что некий человек, скажем, Джон Смит, работающий простым IT-специалистом в некой компании, скажем, ООО “Картофеледобывающие предприятия Приморья”, решает на досуге поднять себя в глазах своего начальника. Начальник днем и ночью живет с мечтой - “А хорошо было бы, если бы была такая программа – хочешь, она тебе данные о урожайности картофеля на каждом острове Курильского архипелага покажет столбцом, хочешь, график урожайности начертит. Вот тогда наши “Картофеледобывающие предприятия Приморья” расцвели бы, глядишь, в саму Японию картофель поставлять стали бы”. Джон Смит знал о такой простой и понятной обывателю мечте своего босса, и однажды он решил эту мечту осуществить. Исключительно по своей душевной доброте Джон быстро выучил C#, WPF, нашел в интернете флагман визуализации научных данных DynamicDataDisplay и начал творить. И скоро босс был счастлив! Тут пришло Джону и повышение, и любовь начальства. Однако не долго длилась счастливая и спокойная жизнь повышенного Джона – очень скоро у босса заснула совесть и проснулась фантазия, и захотел он еще большего – “Хочу”, - говорит, – “ карту видеть перед собой, а на той карте – мириады наших филиалов. В каком филиале картофель сейчас добывают, тот значок переливается, где больше картофеля добыли, там и значок больше!” С таким запросом обратился к нам опечаленный Джон, он не мог найти, как в DynamicDataDisplay работать с картами, и решил, что это и вовсе невозможно. “Ничего подобного, дорогой Джон, ничего невозможного для DynamicDataDisplay нет!” – сказали мы Джону, а сами начали в поте лица создавать подсистему отображения двумерных карт. Сначала первые карты в этой подсистеме выглядели так: Джон дал своему начальнику взглянуть на этот скриншот, и начальник сказал ему, что не на такой Земле работают “Картофеледобывающие предприятия”. Мы долго сравнивали наше видение Земли и видение других общепризнанных профессионалов в этой области, и, в конце концов, решили немного упростить наш революционный взгляд на родную планету, чтобы и простой человек мог разобраться в нашей карте. Так появился второй скриншот: Сейчас прототип этой подсистемы уже хранится на нашем TFS. Вот что он умеет (речь идет о самой распоследней его версии, которая, возможно, существует только на моем ноутбуке): - скачивать карты в несколько потоков с Microsoft Virtual Earth. На данный момент есть поддержка топографических (Road) и географических карт (Aerial). - сохранять скачанные карты на жесткий диск, при необходимости – загружать их оттуда. - работать в нескольких режимах – только онлайновом, смешанном (если тайл уже есть в кэше на жестком диске, то он загружается оттуда, иначе – скачивается из интернета), полностью оффлайновом, в котором все тайлы берутся их кэша на жестком диске) - во время работы хранить необходимые тайлы в памяти. - ну и, конечно, показывать эти карты на ChartPlotter’e. Во время разработки картографической подсистемы были добавлены: - элементы управления и навигации над осями (позволяют перемещать содержимое плоттера только по одной оси) - еще один навигационный элемент, рисующий в месте расположения курсора линии до осей и координаты курсора в логической системе координат. В следующем посте я немного расскажу о производительности получившегося картографического модуля. Приятного использования DynamicDataDisplay! Искренне ваш, Михаил. 1/20/2009 Сегодня я наконец-то перенес часть старых добрых изолиний из Charting в DynamicDataDisplay, причем не просто скопировал из одного проекта и добавил класс в другой, но и немного все это дело отрефакторил, чуть-чуть улучшил читаемость кода, начал выделение подписей к изолиниям в отдельный класс. Кроме того, само рисование изолиний теперь происходит Silverlight-совместимо. Впрочем, многое еще не перенесено, так что это еще не отчет о полнофункциональном релизе, а просто уведомление о некотором продвижении в области изолиний. Напоследок, пруф-пик: 
1/20/2009Hello! Some days before DynamicDataDisplay got its own Twitter-feed, where DynamicDataDisplay developer team opens to the whole world some tasty pieces of D3’s developing. Our feed welcomes you as its folowers! 1/20/2009Некоторое время назад у DynamicDataDisplay появился официальный Twitter-feed, в котором авторы DynamicDataDisplay делятся со всем миром небольшими подробностями разработки D3. Наш feed с радостью примет неограниченное число последователей, так что you’re welcome! 1/09/2009 Хочу похвастаться успехами DynamicDataDisplay за последние дни: Пруф-пикча: 1/04/2009Здравствуйте! Залил свежую версию DynamicDataDisplay на codeplex.com, теперь последняя версия - 0.2.1. Изменения: [+] TimeSpan в осях [+] Простые фигуры на Плоттере – горизонтальные и вертикальные линии, отрезки, открытые и обычные прямоугольники. [+] Тесты для некоторых механизмов D3 1/03/2009
Вероятно, вы могли заметить, что у Visual Studio есть одна назойливая особенность - она не запоминает пароль доступа к TFS, спрашивая его, например, при открытии solution, который связан с Team Foundation Server. Я решил записать небольшой скринкаст, содержащий решение этой небольшой рутинной помехи:
Видео было записано на Windows 7, поэтому некоторые меню и диалоги могут отличаться от аналогов в вашей системе. Могу предположить, что они будут весьма похожи на диалоги в Vista, про XP такого сказать не могу. Но решение работает и в XP и принципиально оно такое же. Вкратце расскажу о решении проблемы сохранения имени пользователя и пароля: нужно в свойствах пользователя добавить ваш пароль для нужного, в качестве логина следует указывать строку вида {краткое имя домена}\{ваше имя пользователя}.
Надеюсь, этот небольшой совет будет для вас полезным. Если у вас есть исправления или дополнения, я с радостью их выслушаю, например, в виде комментариев к этой записи. 10/27/2008Hello! This is the first post in this blog. In future, I hope, this blog will contain info about our project – DynamicDataDysplay – a powerful .NET WPF-based framework for displaying scientific data.
|