Skip navigation links
Блог лаборатории
Alexander Fedotov
Eugene Nourminsky
Mikhail Brinchuk
MSDN AA
Проекты
Digital Workbook
Dynamic Data Display
Live@EDU на ВМК
Мероприятия
Курсы
Летняя школа 2009
Семинар «Технологии разработки и анализа программ»
О лаборатории
Обратная связь
Categories
Archive
D3 – Производительность двумерных карт
Categories: D3

Здравствуйте!

Как вы можете знать из моего блога, в настоящее время я работаю над подсистемой показа двумерных тайловых карт в 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 гигабайта в ОЗУ:

clip_image002

На приведенном изображении границы отдельных тайлов различимы, поэтому вы можете убедиться, что все изображение состоит действительно из 4096 тайлов.

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

Интересно узнать, какой размер такой мегатекстуры в пикселях? Разрешение каждого тайла – 256*256px, по одной стороне мегатекстуры идет 64 тайла, значит, каждая сторона большой текстуры состоит из 256*64 = 16384 пикселей! А общее разрешение – 256 мегапикселей! Не часто в обычной жизни мне, по крайней мере приходилось работать с изображениями такого размера. И даже в столь трудной ситуации WPF проявило себя с лучшей стороны, без сбоев и неполадок отобразив и позволив работать с таким огромным изображением. Думается, если запастись более мощной видеокартой, можно будет отображать в D3 изображения и большего размера.

Чтобы вы могли легче представить себе размер мегатекстуры, я приведу ее же, но не на большом удалении, а в приближении, близком к 1:1:

clip_image004

Мегатекстура содержит всю Землю в подобной детализации.

Как показал этот тест, кэш в памяти также отработал хорошо – приведенный ниже график потребления памяти показывает, что память была освобождена после переключения на более низкий уровень тайлов (этот скриншот был снят не для отображения 6-го уровня, поэтому значения потребления памяти в нем другие, нежели описанные выше):

Map - Memory Releasing

D3 – Видео с прототипом двумерных карт
Categories: D3

Здравствуйте!

Я записал видео, просмотрев которое вы сможете увидеть ранний прототип двумерных карт в DynamicDataDisplay и получить представление, как этот прототип работает.

Vimeo Map Screencast Thumbnail

Оригинал видео в разрешении 800x600 можно скачать, если переместиться в нижнюю часть страницы и найти секцию Download (внизу справа). Размер видео – около 21 Мбайта.

Приятного просмотра!

D3 – Прототип двумерных карт
Categories: D3

Здравствуйте!

В последнее время я работал над созданием в DynamicDataDisplay подсистемы отображения двумерных карт, представленных в виде отдельных тайлов. Вам хорошо знакомы такие карты – в последнее время они получили широкое распространение в интернете: достаточно вспомнить Google Maps или более знакомые некоторым из нас (Никита, привет!) Microsoft Virtual Earth.

Давайте представим, что некий человек, скажем, Джон Смит, работающий простым IT-специалистом в некой компании, скажем, ООО “Картофеледобывающие предприятия Приморья”, решает на досуге поднять себя в глазах своего начальника. Начальник днем и ночью живет с мечтой - “А хорошо было бы, если бы была такая программа – хочешь, она тебе данные о урожайности картофеля на каждом острове Курильского архипелага покажет столбцом, хочешь, график урожайности начертит. Вот тогда наши “Картофеледобывающие предприятия Приморья” расцвели бы, глядишь, в саму Японию картофель поставлять стали бы”. Джон Смит знал о такой простой и понятной обывателю мечте своего босса, и однажды он решил эту мечту осуществить. Исключительно по своей душевной доброте Джон быстро выучил C#, WPF, нашел в интернете флагман визуализации научных данных DynamicDataDisplay и начал творить. И скоро босс был счастлив!

Тут пришло Джону и повышение, и любовь начальства. Однако не долго длилась счастливая и спокойная жизнь повышенного Джона – очень скоро у босса заснула совесть и проснулась фантазия, и захотел он еще большего – “Хочу”, - говорит, – “ карту видеть перед собой, а на той карте – мириады наших филиалов. В каком филиале картофель сейчас добывают, тот значок переливается, где больше картофеля добыли, там и значок больше!”

С таким запросом обратился к нам опечаленный Джон, он не мог найти, как в DynamicDataDisplay работать с картами, и решил, что это и вовсе невозможно. “Ничего подобного, дорогой Джон, ничего невозможного для DynamicDataDisplay нет!” – сказали мы Джону, а сами начали в поте лица создавать подсистему отображения двумерных карт.

Сначала первые карты в этой подсистеме выглядели так:

Maps - First Pancake Is Like Ball

Джон дал своему начальнику взглянуть на этот скриншот, и начальник сказал ему, что не на такой Земле работают “Картофеледобывающие предприятия”. Мы долго сравнивали наше видение Земли и видение других общепризнанных профессионалов в этой области, и, в конце концов, решили немного упростить наш революционный взгляд на родную планету, чтобы и простой человек мог разобраться в нашей карте. Так появился второй скриншот:

Maps - Second Pancake Is Better

Сейчас прототип этой подсистемы уже хранится на нашем TFS.

Вот что он умеет (речь идет о самой распоследней его версии, которая, возможно, существует только на моем ноутбуке):

- скачивать карты в несколько потоков с Microsoft Virtual Earth. На данный момент есть поддержка топографических (Road) и географических карт (Aerial).

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

- работать в нескольких режимах – только онлайновом, смешанном (если тайл уже есть в кэше на жестком диске, то он загружается оттуда, иначе – скачивается из интернета), полностью оффлайновом, в котором все тайлы берутся их кэша на жестком диске)

- во время работы хранить необходимые тайлы в памяти.

- ну и, конечно, показывать эти карты на ChartPlotter’e.

Во время разработки картографической подсистемы были добавлены:

- элементы управления и навигации над осями (позволяют перемещать содержимое плоттера только по одной оси)

- еще один навигационный элемент, рисующий в месте расположения курсора линии до осей и координаты курсора в логической системе координат.

В следующем посте я немного расскажу о производительности получившегося картографического модуля.

Приятного использования DynamicDataDisplay!

Искренне ваш,

Михаил.

Изолинии снова приходят в D3
Categories: D3

Сегодня я наконец-то перенес часть старых добрых изолиний из Charting в DynamicDataDisplay, причем не просто скопировал из одного проекта и добавил класс в другой, но и немного все это дело отрефакторил, чуть-чуть улучшил читаемость кода, начал выделение подписей к изолиниям в отдельный класс. Кроме того, само рисование изолиний теперь происходит Silverlight-совместимо.

Впрочем, многое еще не перенесено, так что это еще не отчет о полнофункциональном релизе, а просто уведомление о некотором продвижении в области изолиний.

Напоследок, пруф-пик:

D3-Isolines

Official Twitter-feed of DynamicDataDisplay
Categories: D3

Hello!

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!

Официальный Twitter-feed DynamicDataDisplay
Categories: D3

Некоторое время назад у DynamicDataDisplay появился официальный Twitter-feed, в котором авторы DynamicDataDisplay делятся со всем миром небольшими подробностями разработки D3.

Наш feed с радостью примет неограниченное число последователей, так что you’re welcome!

Успехи D3
Categories: D3

Хочу похвастаться успехами DynamicDataDisplay за последние дни:

Пруф-пикча:

D3 in codeplex RSS

D3-2 - Залил свежую версию DynamicDataDisplay на codeplex.com
Categories: D3
Здравствуйте! Залил свежую версию DynamicDataDisplay на codeplex.com, теперь последняя версия - 0.2.1.

Изменения:

[+] TimeSpan в осях

[+] Простые фигуры на Плоттере – горизонтальные и вертикальные линии, отрезки, открытые и обычные прямоугольники.

LineSample

[+] Тесты для некоторых механизмов D3

Как излечить склероз Visual Studio?
Categories: Tips

Вероятно, вы могли заметить, что у Visual Studio есть одна назойливая особенность - она не запоминает пароль доступа к TFS, спрашивая его, например, при открытии solution, который связан с Team Foundation Server.
Я решил записать небольшой скринкаст, содержащий решение этой небольшой рутинной помехи:

Vimeo VS Screencast Preview

Видео было записано на Windows 7, поэтому некоторые меню и диалоги могут отличаться от аналогов в вашей системе. Могу предположить, что они будут весьма похожи на диалоги в Vista, про XP такого сказать не могу. Но решение работает и в XP и принципиально оно такое же.
Вкратце расскажу о решении проблемы сохранения имени пользователя и пароля: нужно в свойствах пользователя добавить ваш пароль для нужного, в качестве логина следует указывать строку вида {краткое имя домена}\{ваше имя пользователя}.

Надеюсь, этот небольшой совет будет для вас полезным.
Если у вас есть исправления или дополнения, я с радостью их выслушаю, например, в виде комментариев к этой записи.

First post
Categories: D3

Hello!

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.