Archivo

Posts Tagged ‘.Net’

BenchMark: Performance Analysis

Anuncios

BenchmarkDotNet librería opensource para benchmarking en .Net

diciembre 22, 2017 Deja un comentario

BenchMark en computación se conoce como el acto o proceso para evaluar o realizar auditoria sobre diferentes componentes de la aplicación, como por ejemplo métodos y funciones en el concepto de programación orientada a objetos.

BenchmarkDotNet es un proyecto opensource para .net diseñado para este proceso y facilitar cada una de las pruebas que deseemos hacer.

con banchMarkDotnet tenemos las siguientes ventajas

  • Rutina estándar de  benchmarking: generando un caso aislado en cada proyecto por cada método; auto-selección de la cantidad de iteraciones  y calculo de estadísticas.
  • Soporte de frameworks: Full .NET Framework (4.6+), .NET Core (1.1+), Mono
  • Soporte de lenguajes: C#, F#, and Visual Basic
  • Sistemas operativos : Windows, Linux, MacOS
  • Fácil comparación de ambientes  (x86 vs x64LegacyJit vs RyuJit, and so on; see: Jobs)
  • Reportes: markdown, csv, html, json, xml, plain text and png plots

Toda la documentación del proyecto se encuentra en su pagina oficial  http://benchmarkdotnet.org/index.htm

Para usar BenchMarkDotnet solo tenemos que instalar el nuget correspondiente en el proyecto en que estemos y con eso podemos empezar a utilizarlo facilmente

Benchmark1

El siguiente código muestra un ejemplo sencillo usando BrenchMark en una aplicación de consola de netcore, como vemos lo único que debemos hacer es usar la marca [Benchmark]  sobre el método que queremos  auditar y dentro de la aplicación  utilizamos  BenchmarkRunner.Run();  no tenemos que hacer impresión directamente en consola (osea usar Console.WriteLine), muy importa tener en cuenta que la aplicación debe esta en modo Release

namespace BenchMarkDotnetDemo
{
 class Program
 { 
    static void Main(string[] args)
   {
      var summary = BenchmarkRunner.Run();

      Console.ReadLine();
   }
 }

   public class RandomCustom
   {
    int getRandom()
    {
     int inRandom = 0;
     for (int i = 0; i < 10000; i++)
     {
      inRandom = new Random().Next(i);
     }

     return inRandom;
    }

    [Benchmark]
    public int GetintRandom() => getRandom();
  }
}

vemos el siguiente resultado en la consola con los datos obtenidos

Benchmark2

Dentro del proyecto podemos encontrar también una carpeta llamada BenchmarkDotNet.Artifacts donde se almacenan los resultados

 

Benchmark3

 

Fácilmente con un Tag dentro de la clase podemos indicar en que frameworks se llevará acabo las pruebas:

[ClrJob, CoreJob, MonoJob]  // used to specify the system core (CoreJob), Mono (MonoJob) and dotnet classic (ClrJob)

Usando [AnyCategoriesFilter(“Run”)] podemos filtrar los métodos antes de la ejecución.

Podemos indicar que un atributo será un parámetro y los valores con los que deseamos hacer las pruebas [Params(50, 1000,50000,1000000)]

Muchas otras configuraciones adicionales se pueden hacer y se encuentran dentro de la documentación de BenchmarkDotNet

El siguiente es un ejemplo mas completo usando las opciones antes mencionadas

class Program
 { 
 static void Main(string[] args)
 {
 var summary = BenchmarkRunner.Run<RandomCustom>();

Console.ReadLine();
 }
 }

[CoreJob] // used to specify the system core (CoreJob), Mono (MonoJob) and dotnet classic (ClrJob)
 [AnyCategoriesFilter("Run")] //execute all method with mark NoRun
 public class RandomCustom
 {
 [Params(50, 1000,50000,1000000)]
 public int intlong { get; set; }

int getRandom()
 {
 int inRandom = 0;
 for (int i = 0; i < intlong; i++)
 {
 inRandom = new Random().Next(i);
 }

return inRandom;
 }

[Benchmark]
 [BenchmarkCategory("Run")]
 public int GetintRandom() => getRandom();

[Benchmark]
 [BenchmarkCategory("NoRun")]
 public int GetintRandom2() => (getRandom() *2);
 }

 

podemos ver los resultados con cada una de los valores del parámetro

Benchmark4

 

Código Fuente:

https://github.com/Mteheran/BenchMarkDemo

Estado de .Net para el 2018

diciembre 6, 2017 1 comentario

Nota importante este articulo esta basado en el articulo publicado por Telerik “The State of .NET in 2018” 

La siguiente gráfica podemos observar el estado  de las tecnologías, plataformas y herramientas de desarrollo que tenemos a disposición en .Net y que tendremos para el próximo año:

2017-12-05_1658

Como vemos en la gráfica tenemos 3 grandes bloques para construir aplicaciones basadas en las .NET Standard library  las librerías base con todos los componentes de .Net, y en herramientas ahora con aclamado Visual Code multiplaforma que se ha convertido en el favorito de los desarrolladores.

.Net Standard Library juega un papel muy importante en el presente y futuro de .net ya que este evita que se genere la fragmentación que se tenia por las diferentes plataformas, especialmente por la ultima que adquirida por Microsoft que fue Xamarin.

2017-12-05_1708

La Standard Library es la librería base de todos los proyectos en .Net independiente de la plataforma utilizada y estas se complementan usando Nugets y librerías especificas para cada una. 2017-12-05_1715

El gráfica anterior podemos ver las diferentes versiones de .Net Standard y  la compatibilidad con las diferentes versiones de cada una de las plataformas existentes, como podemos ver UWP no tiene soporte aun pero se espera que pronto lo tenga.

.Net Core 2.0 ultima versión lanzada de esta plataforma tiene muchas mejoras de compatibilidad con respecto a las APIs que solíamos usar en .Net Framework,  de momento solo 43 APIs no están soportadas en .NET core así que la posibilidad de migrarse se facilita mucho:

2017-12-05_1745

XAML es utilizado en tecnologias Microsoft para el diseño de interfaces en WPF, UWP y Xamarin sin embargo tiene un fragmentación latente en cada una de ellas por ejemplo podemos ver en UWP vs Xamarin lo siguiente:

UWP              -      Xamarin

StackPanel      vs     StackLayout

TextBlock        vs      Label

Esto provoca que se haga dificil reutilizar este código de lado a lado de manera fácil.

XAML Standard llega como la solución a este problema como una especificación única para todas tecnologías que usen XAML

Aun no se tiene una fecha exacta de la primera versión de XAML  Standard pero ya se tienen los repositorios para tal fin  https://github.com/Microsoft/xaml-standard

Angular y React ahora son mas fáciles de utilizar para los .Net developers puesto que con .Net core tenemos 2 templetes que nos permiten utilizar un proyecto base conectado directamente a un Web Api. Tenemos las opciones de Angular, React.js y React.Js and Redux

2017-12-06_1515

Un C# fortalecido en las versiones 7.X y una futura versión 8.0.  Este lenguaje de programación sigue creciendo con nuevas funcionalidades que ya tienen algunos otros lenguajes y alejándose de estigma de ser una copia barata de Java

En el siguiente link puedes encontrar un post anterior con todos los cambios de C#:

https://mteheran.wordpress.com/2017/12/01/features-c-7-0-7-1-7-2/

 

UWP ha logrado unificar todos los dispositivos Microsoft en torno a un único sistema operativo que es Windows 10. Obviamente las capacidades de un dispositivo de Iot son diferentes a las de un PC o Xbox pero afortunadamente con las Extensions SDK podemos extender las funcionalidades de la App que estemos desarrollando para cada uno de las plataformas.

2017-12-06_1541

 

La conclusión al final es que se pinta un 2018 con muchas cosas interesantes por de Microsoft y sus tecnologías. Y si a todo esto agregamos los servicios de Azure tenemos todo un ecosistema robusto para trabajar con nuestras aplicaciones incluyendo tecnologías no creadas por Microsoft.

Sin embargo para todos los developers se hace necesario estar actualizado de los cambios que se presentan y empezar ha utilizar tecnologías como .Net Core desde este momento para sacarle provecho.

 

MDE.Net comunidad .Net en Medellin

diciembre 3, 2017 Deja un comentario

MDE.Net es la comunidad .Net en Medellin que realiza meetups mensuales con temas relacionados a tecnologias Microsoft .

hasta el momento todos los meetups se han llevado acabo en Ruta N medellin  https://www.rutanmedellin.org/es/

Complejo Ruta N Calle 67 Nº 52-20
Piso 1 sala 1 Torre A

Somos 4 orgnizadores que trabajamos en diferentes empresas del sector y nos encargamos de logistica en cada evento

9284ef22-6ddd-46be-8666-37b6537d4626

Tenemos un meetup oficial en que pueden inscribirse para el evento

MDE.NET

Medellín, CO
558 Miembros

Este es un grupo para todos los desarrolladores y entusiastas del desarrollo que usan o desean aprender .Net y tecnologías Microsoft en general. Te invitamos a participar de n…

Check out this Meetup Group →

Nuestras redes sociales:

https://www.facebook.com/mdedotnet/

https://twitter.com/mdedotnet

 

El pase de diapositivas requiere JavaScript.

Razor vs Tag helpers .Net core

En .Net core tenemos la posibilidad de utilizar Tag Helpers para diseñar nuestras vistas, esto nos permite omitir el uso de Razor y poder diseñar vistas simplemente extendiendo las propiedades de HTML con algunas especificas integradas.

Hay que aclarar que podemos usar una combinación de Razor y tag herlpes en pocas podemos usar el uno, el otro o la combinación de ambos.

Aquí esta una lista de como podemos se traduce a través de  TagHelpers cierta nomenclatura de Razor:

Razor
1 “@Html.LabelFor(model => model.title)”
2 “@Html.EditorFor(model => model.title)”
3 “@Html.ValidationMessageFor(model => model.title, “”)”
4 “@using (Html.BeginForm())”
5 “@Html.ValidationSummary(true, “”, new { @class = “text-danger” })”
6 “@Html.ActionLink(“Back to List”, “Index”)”
7 “@Html.TextAreaFor(model=> model.Description)”
8 “@Html.DropDownList(“Country”, (IEnumerable<SelectListItem>)ViewData[“Countries”])”
Tag Helper
1 <label asp-for=”title”></label>
2 <input asp-for=”title” />
3 <span asp-validation-for=”title”></span>
4 <form asp-action=”Create”>
5
6 <a asp-action=”Index”>Back to List</a>
7 <textarea asp-for=”Description”></textarea>
8 <select asp-for=”Country” asp-items=”Model.Countries”></select>

Sin título

Razor vs Tag helpers

Ruta por defecto en un proyecto Web.Api .Net Core

marzo 30, 2017 Deja un comentario

Podemos definir facilmente la ruta en la que se va inicar nuestro proyecto Web.Api cuando hagamos debug

para ellos solo debemos ir a las propiedades del proyecto  y luego definir en debug la ruta que deseemos abrir por defecto.

 

webapicore

 

webapicore2

Definir página inicial en ASP.NET Core

marzo 29, 2017 Deja un comentario

Para definir una pagina por defecto en ASP.Net core simplemente tenemos que cambia la ruta por defecto del controlador

 app.UseMvc(routes =>
 {
 routes.MapRoute(
 name: "default",
 template: "{controller=[controller]}/{action=[action]}/{id?}");
 });

Si deseamos especificar una pagina HTML debemos usar el metodo DefaultFiles como muestra en el ejemplo

 DefaultFilesOptions DefaultFile = new DefaultFilesOptions();
 DefaultFile.DefaultFileNames.Clear();
 DefaultFile.DefaultFileNames.Add("MyPage.html");
 app.UseDefaultFiles(DefaultFile);
 app.UseStaticFiles();