Skip to content

Jeremy Alles Presentation Foundation: WPF, .Net and modern software development
Syndicate content
Jeremy Alles Presentation Foundation: WPF, Silverlight, Windows Phone 7, Windows 8
Updated: 1 day 2 hours ago

Windows Phone performance analysis & optimization during TechDays

Fri, 01/27/2012 - 08:57

In about 2 weeks now, I’ll have the chance to be part of the French TechDays in Paris as a speaker. This year, I’ll own a session called “Windows Phone performance analysis & optimisation” with my colleague Charlotte.

The agenda looks like the following:

  • why performance analysis ?
  • device vs emulator
  • leveraging WP7 threads
  • using the VS profiler for WP7
  • tips and tricks

During the session we will use a “real” app we’re working on for a few months now (I’ll share more details after the session). We have some cool tips that haven’t been shared anywhere before, so if performance is a topic of interest for you, stat tuned !

Click on the following image for a link to the TechDays website:

I’m planning to share the most of the content of this session on my blog soon after the event.

Don’t hesitate to stop by and say hi…

Categories: Blogs

ReSharper and code generation

Fri, 01/13/2012 - 13:58

I don’t know why I’ve found this feature only today, but I wanted to share another great feature of ReSharper. Let say you need to implement a C# structure. You may start with the following code:

?View Code CSHARP
1
2
3
4
5
6
public struct ServerItem
{
    public string Id { get; private set; }
    public DateTime? Added { get; private set; }
    public int ChildCount { get; private set; }
}

Then you start thinking, “I need to setup a constructor…” You can do it manually, but you can also ask ReSharper do to the job for you. All you have to do is press ALT+Enter (this might depend on your configuration obviously…)

ReSharper will generate the constructor for you:

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public struct ServerItem
{
    public ServerItem(string id, DateTime? added, int childCount)
        : this()
    {
        this.Id = id;
        this.Added = added;
        this.ChildCount = childCount;
    }
 
    public string Id { get; private set; }
    public DateTime? Added { get; private set; }
    public int ChildCount { get; private set; }
}

Fine. Then you remember that you also need to setup equality members properly… You have to override Equals, GetHashCode… This is not complicated but it can become cumbersome and it often feels like a waste of time. Here is the ReSharper way of doing this:

1. Press ALT+Enter

2. Choose “Equality members” and setup the code generation:

And BOOOM ! You’re done:

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public struct ServerItem
{
    public ServerItem(string id, DateTime? added, int childCount)
        : this()
    {
        this.Id = id;
        this.Added = added;
        this.ChildCount = childCount;
    }
 
    public string Id { get; private set; }
    public DateTime? Added { get; private set; }
    public int ChildCount { get; private set; }
 
    public bool Equals(ServerItem other)
    {
        return Equals(other.Id, this.Id) && other.Added.Equals(this.Added) && other.ChildCount == this.ChildCount;
    }
 
    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj))
        {
            return false;
        }
        if (obj.GetType() != typeof(ServerItem))
        {
            return false;
        }
        return Equals((ServerItem)obj);
    }
 
    public override int GetHashCode()
    {
        unchecked
        {
            int result = (this.Id != null ? this.Id.GetHashCode() : 0);
            result = (result * 397) ^ (this.Added.HasValue ? this.Added.Value.GetHashCode() : 0);
            result = (result * 397) ^ this.ChildCount;
            return result;
        }
    }
 
    public static bool operator ==(ServerItem left, ServerItem right)
    {
        return left.Equals(right);
    }
 
    public static bool operator !=(ServerItem left, ServerItem right)
    {
        return !left.Equals(right);
    }
}

The code-generation features of ReSharper has been there for a long time… But because I just found out the power of them, I wanted to briefly showcased them in this post :-)

Categories: Blogs

If you like typing XAML you will love ReSharper 6.1 !

Mon, 01/09/2012 - 18:42

Resharper is an amazing tool for any .Net developers. The latest version 6.1 has been released just a couple of weeks ago and I wanted to share with you a brief overview of the new workflow available in the XAML world !

Visual Studio 2010 introduced 2 new design time properties: d:DesignInstance and d:DesignData. Those properties can be used in order to specify a design time DataContext in order to have more help during the creation of a binding.

For example, when you create a binding using the Property dialog of VS2010 you can browse your DataContext to select the right property (image from this blog post from Karl Shifflet):

Resharper 6.1 is now able to use those metadata in order to improve the experience you have while typing XAML (which I personally do a LOT!). Here is how it works:

  • you create a new ViewModel with a simple property (this property has just get/set because we don’t need much more in the context of this post…)

  • you setup a binding in your view

At this point the ReSharper magic comes into play…

  • ReSharper warns you the DataContext is unknown

  • Offer the ability to fix this

  • Note that like in C#, you can very easily resolve namespace issues

  • Then notice that the warning is gone (the Title property is no longer underlined)

  • You can now add a new binding

  • You can then ask ReSharper to create the property in your ViewModel

  • Choosing the first option will get you to the ViewModel definition

Now that I’ve upgraded my installation to version 6.1, I think this is a must have !

That’s all for today ! Hope it helps :-)

 

 

Categories: Blogs

Welcome 2012 and happy new year!

Tue, 01/03/2012 - 13:55

The beginning of the year always seems the appropriate time to take a step back and see what happened in the last few months… So let’s take a deep breath…

The last year has been a busy for me… At the beginning of February I had the chance to give a talk about Rx (Reactive Extensions) in Paris for the Microsoft TechDays with my colleague Charlotte and ex-Microsoftee Mitsu Furuta. It was my first talk in such an event and it was a very valuable and interesting experience.

Few weeks after that, I went to the US for the very first time. I was in Redmond for a week for the annual MVP Summit. I had a dinner with the WPF Disciples where I finally met in person some of the guys of the group. I also discovered the Microsoft campus in Redmond, had a dinner with members of the WPF team…

In September I went to Anaheim (near Los Angeles) for //BUILD/. It was an amazing time. I’ve never seen so much enthusiast and it was truly amazing (maybe the Windows 8 slate distributed during the event is part of that!) It was also the occasion to meet new people.

In November, I went to Lyon for the MSDays as ATE (Ask The Expert) in order to discuss Windows 8 (and show the //BUILD/ slate):

Blog post activity has been also important and more varied (Windows Phone, Windows 8, WinRT…)

In 2012, I hope to do more work with Windows Phone. As an introduction to that, I’ll be speaking at the Microsoft TechDays in February on the subject “Performance analysis and optimization of Silverlight Windows Phone app”. I’ll write a blog post about this session very soon.

Happy new year to all my readers, and thank you for reading this blog and sharing your feeling in the comments!

Categories: Blogs