Wednesday, 19 November 2008

Let's talk about performance

Hello guys,

I attended a very very interesting session at TechEd held by the unforgetable, unbeliveable Douglas Boling - If you have not been to one of his talks then that is something you have to put on your ToDo list.

The session had the following title: "Windows Embedded CE Application Development", but was actaully about performance. So, what kind of performance did we talk about? I will try to give you a short summary.

Basicly in the embedded world we can differentiate between:
  • device performance &

  • developer performance

Embedded devices are not so powerful as PCs and there are many constraints: memory, processor speed, power issues etc. Because of this the developers/tools and applications have to meet some requirements specific to embedded devices.

If you have to develop an application for Windows Embedded, then you have basically 3 frameworks to achieve this with:

  • usage of Win32 API

  • uasge of MFC

  • usage of .NET compact framework
With Win32 API you will write the "fastest" and most "compact" code, but it requires some advanced programming skills from the developers. The code may be fast, but development and time to market will not! And notice: the realtime(able) code can be only written with Win32 API.

Now let's talk about the usage of MFC for Windows Embedded application development: Sorry, but there is nothing to say. In Doug Boling's opinion, it's a "dead technology" which shouldn't be used anymore - and I agree with him.

Last but not least, we have the .NET compact framework. It allows a very good developer performance. The developers are able to create new applications very fast, because
  • the tool support is much better than with Win32.

  • C# is better than C++

  • Processor and O/S abstraction is done by the .NET compact framework
  • .NET Compact Framework apps run on desktops!
  • Build for one device target and run it on all processors
But .NET applications are not realtime applications! Just think of the carbage collection - always think of dispose.

So, what to do, when you have to develop a Windows Embedded application and don't know what to choose? Put your high-level requirements (time to market, which device you will use etc.) together and make a kind of trade-off decision: device performance vs. developer performance. You can't have both!

By the way -
Q: What is the difference between a Desktop Software Engineer and an Embedded Software Engineer?
A: The Desktop Software Engineer gets paid to write code fast; The Embedded Software Engineer gets paid to write fast code.

No comments: