2011-06-06 6 views
5

Estoy buscando métodos para impulsar la aplicación C#/.NET. Lo que he encontrado hasta ahora esAcelerando la ejecución de la aplicación C#/.NET

  1. Uso ngen.
  2. Cuidado when using as operator
  3. Cuidado al usar la API de reflexión. Lleva bastante tiempo cargar dll con Assembly.LoadFrom().

Qué otras herramientas/consejos/buenas prácticas debe obtener para obtener el mejor rendimiento del programa C# /. NET.

+7

Esto es muy amplio y al revés. Primero, haga que su código funcione, luego resuelva problemas concretos de rendimiento. –

+0

intente comenzar con el artículo de MSDN [Performance (C# y Visual Basic)] (http://msdn.microsoft.com/en-us/library/ms173196). También como dice Rico Mariani Medida, medida, medida –

Respuesta

5

Primero tenga cuidado con ngen. En realidad, podría terminar perjudicando el rendimiento. Vea el libro de Jeff Richter "CLR via C#, Third Edition" para más detalles.

Personalmente voy a utilizar un generador de perfiles cuando necesito ajustar el rendimiento de mi aplicación. El que prefiero son las hormigas rojas, pero hay muchas buenas en el mercado. Sin embargo, usarlos puede ser un poco complicado porque producirán mucho ruido.

La mayor parte de los problemas que he visto son causadas generalmente por el desarrollador o la arquitectura global en lugar de .Net Framework. Por ejemplo, una aplicación web Asp.Net que requiere más de 30 llamadas a la base de datos solo para cargar la página de inicio.

1

Recuerde funciones costosas cuando sea posible.

public static class Expensive 
{ 
    private static readonly ConcurrentDictionary<int, int> _map = 
     new ConcurrentDictionary<int, int>(); 

    public static int Calculate(int n) 
    { 
     return _map.AddOrUpdate(n, Add, (key, value) => value); 
    } 

    static int Add(int key) 
    { 
     return 0; 
    } 
} 
+1

Sin embargo, no lo hagas a ciegas. – SLaks

1

No use ngen hasta que precisamente sabe qué entorno CPU archivos DLL van a ser desplegados sucesivamente. Y asegúrese de que no se implementarán en otros tipos de CPU. Es malo si compila a x86 nativo y se implementa en x64. Perderá todas las optimizaciones que el compilador podría haber hecho JIT.

El rendimiento depende de lo que su aplicación está tratando de hacer. Las pautas serían muy diferentes si se tratara de una aplicación web impulsada por db frente a una aplicación de reproductor de música de escritorio. Sin embargo, usted debe buscar para evitar el boxeo/unboxing, mucha reflexión, usando XmlDocument para cargar un gran documento XML, y el uso de la clase CLR ThreadPool incorporado para hacer multi-threading, recuerde que debe aplicar IDisposable para nombrar unos pocos ..

1

una vez pasé varios días reescribir el código para acelerar la aplicación, cuando en realidad descubrí que había un cuello de botella en mi aplicación CompareTo que estaba siendo llamado miles de veces.

  • Uso aprofiler.
  • No pierda el tiempo optimizando lo que no importa (en su caso).
  • Descubre lo que hace.
Cuestiones relacionadas