Eu criei alguns pequenos programas para comparar o tempo de inicialização entre o Windows Forms e WPF, rodando em .NET 4.0. Eles rodaram 100 vezes e então eu obtive a média. Aqui estão os resultados.
A moda para o tempo de inicialização resultou em 31,25 milisegundos para Windows Forms e 234,37 ms para WPF. Aqui está a distribuição de valores:
Não estou disponibilizando os valores exatos pois para mim o mais importante é a noção de velocidade de inicialização e não a comparação precisa que pode variar muito dependendo do sistema. Por isso sugiro testar em seu próprio ambiente. Abaixo está o resultado do profiling dos aplicativos.
WPF:
Handles created: 605
Handles destroyed: 345
Handles surviving: 260
Windows Forms:
Handles created: 88
Handles destroyed: 15
Handles surviving: 73
Todos os outros valores são zero.
O primeiro aplicativo em Windows Forms tem o seguinte código:
static class Program
{
public static DateTime start;
[STAThread]
static void Main()
{
start = DateTime.Now;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
public partial class Form1 : Form
{
public Form1()
{ InitializeComponent(); }
private void Form1_Shown(object sender, EventArgs e)
{
File.AppendAllText(@"C:\WinFormsStartTime.txt",
DateTime.Now.Subtract(Program.start).TotalMilliseconds.ToString() + "\n");
Process process = Process.GetCurrentProcess();
File.AppendAllText(@"C:\WinFormsMemory.txt",
process.PrivateMemorySize64.ToString() + "\n");
Application.Exit();
}
}
O segundo aplicativo tem o seguinte código:
public partial class App : Application
{
public static DateTime start;
protected override void OnStartup(StartupEventArgs e)
{
start = DateTime.Now;
base.OnStartup(e);
}
}
public partial class MainWindow : Window
{
public MainWindow()
{ InitializeComponent(); }
private void Window_ContentRendered(object sender, EventArgs e)
{
File.AppendAllText(@"C:\WpfStartTime.txt",
DateTime.Now.Subtract(App.start).TotalMilliseconds.ToString() + "\n");
Process process = Process.GetCurrentProcess();
File.AppendAllText(@"C:\WpfMemory.txt",
process.PrivateMemorySize64.ToString() + "\n");
Application.Current.Shutdown();
}
}
<Window x:Class="SimpleWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" ContentRendered="Window_ContentRendered">
<Grid>
</Grid>
</Window>


