Monthly Archives: February 2008

.Net 3.5 Roadmap: Улучшения WPF

Scott Guthrie в своем блоге написал о доработках WPF, которые будут реализованы в ближайшем будущем:

Наконец то в WPF будут добавлены контролы для выбора даты и календарь, а также Риббон и DataGrid.

Later this year we are also planning to release a number of new controls for WPF. Included in the list we are working on are DataGrid, Ribbon, and Calendar/DatePicker controls.

Также будут сделана оптимизация BitmapEffects на уровне железа.

Но больше всего меня интересует новый класс WriteableBitmap:

We’ll be including a new WriteableBitmap API that enables real-time bitmap updates from a software surface. We’ll also be adding support for a powerful new effects API that enables you to build richer graphics scenarios.

Пока рано говорить о том, что он может дать.

Бесплатный сыр для студентов

Микрософт решил раздать свои продукты студентам бесплатно. Инициатива DreamSpark уже доступна в 11 странах, но наша, естественно, в список стран пока не входит. Официальный пост и видео с Биллом можно найти тут

Доступные продукты: Windows Server, Expression Suite, XNA Game Studio, SQL Server и новая Visual Studio.

Остается надеяться, что русским студентам все это тоже вскоре будет доступно.

Тест производительности простейших операций: Модуль числа

Всякий раз, когда я пользовался Math.Min() или Math.Abs(), я думал о том, а не лучше было бы написать эти операции простым неравенством.  Наконец, я решил просто написать небольшой тестик, который должен раз и навсегда расставить все на свои места.

В качестве основы я взял почти пустой цикл:

int N = 100000000;

 

Start = DateTime.Now;

//Almost nothing!

for (int i = -N; i < N; i++)              

  result = i;

End = DateTime.Now;

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

for (int i = -N; i < N; i++)

{

  result = i;

  result = Math.Abs(i);

}

 

 

или, например, так:

for (int i = -N; i < N; i++)

{

  result = i;

  result = (i >= 0) ? i : -i;

}

 

Из времени выполнения этих циклов я вычел время выполнения пустого цикла. Получились интересные результаты:

Continue reading

Полезный Xaml

Все таки Xaml – это полезная вещь. Я написал коротенькую функцию, с помощью которой можно задавать содержимое TextBlock’ов с помощью xaml кода. Это нужно, когда содержимое нужно менять походу выполнения программы. Например, написав:

SetInlines(MyCuteTextBlock, "Крутой текст с <Bold>выделениями</Bold>, переносами строк,<LineBreak/><Underline>подчеркиваниями</Underline> и тому подобными стильными вещицами.");

получаем следующий результат:

 

А добиться такой простой записи позволяет простая функция:

using System.IO;
using System.Windows.Markup;
using System.Xml;
//Create inlines from xaml string
private void SetInlines(TextBlock tb, string XamlCode)
{
    string Op = "<TextBlock xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">";
            string Ed = "</TextBlock>";
            StringReader stringReader = new StringReader(Op + XamlCode + Ed);
            XmlReader xmlReader = XmlReader.Create(stringReader);
            TextBlock TempTB = (TextBlock)XamlReader.Load(xmlReader);
            //Lets copy inlines
            tb.Inlines.Clear();
            List<Inline> inls = new List<Inline>(TempTB.Inlines);
            foreach (Inline nl in inls)
                tb.Inlines.Add(nl);
}

Здесь используется класс XamlReader, который позволяет парсить XAML динамически, то есть уже на этапе исполнения программы.