El Libro del Día: 2016-07-26
Titulo: More Effective C#
Autor: Bill Wagner
Editorial: Addison-Wesley
Nro Paginas: 309
Capítulos:
Chapter 1. Working with Generics
Chapter 2. Multithreading in C#
Chapter 3. C# Design Practices
Chapter 4. C# 3.0 Language Enhancements
Chapter 5. Working with LINQ
Chapter 6. Miscellaneous
Descarga:
More_Effective_C#
Blog de Luis Dueñas dedicado a la difusión del Desarrollo en Microsoft .NET, Visual Studio, WinForms, WebForms, MVC, ASP .NET, jQuery, AJAX, HTML5, JavaScript, Móviles, etc. Encontrarás Libros, Demos, Artículos Técnicos, Entrenamiento.
Mostrando las entradas con la etiqueta Actions. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Actions. Mostrar todas las entradas
martes, 26 de julio de 2016
El Libro del Día: More Effective C#
Etiquetas:
.NET,
Actions,
Addison,
Anonymous,
Arrays,
Bill Wagner,
C#,
Cross-Thread,
Delegates,
Design Practices,
Extensions,
Functions,
Generics,
Libros,
LINQ,
More Effective,
Multithreading,
Parameters,
Predicates,
Thread Pool
miércoles, 23 de marzo de 2016
El Libro del Día: Mastering React
El Libro del Día: 2016-03-23
Titulo: Mastering React
Autor: Adam Horton, Ryan Vice
Editorial: Packt
Nro Paginas: 254
Capítulos:
Chapter 1: Introduction to React
Chapter 2: Component Composition and Lifecycle
Chapter 3: Dynamic Components, Mixins, Forms, and More JSX
Chapter 4: Anatomy of a React Application
Chapter 5: Starting a React Application
Chapter 6: React Blog App Part 1 – Actions and Common Components
Chapter 7: React Blog App Part 2 – Users
Chapter 8: React Blog App Part 3 – Posts
Chapter 9: React Blog App Part 4 – Infinite Scroll and Search
Chapter 10: Animation in React
Descarga:
Mastering_React
Titulo: Mastering React
Autor: Adam Horton, Ryan Vice
Editorial: Packt
Nro Paginas: 254
Capítulos:
Chapter 1: Introduction to React
Chapter 2: Component Composition and Lifecycle
Chapter 3: Dynamic Components, Mixins, Forms, and More JSX
Chapter 4: Anatomy of a React Application
Chapter 5: Starting a React Application
Chapter 6: React Blog App Part 1 – Actions and Common Components
Chapter 7: React Blog App Part 2 – Users
Chapter 8: React Blog App Part 3 – Posts
Chapter 9: React Blog App Part 4 – Infinite Scroll and Search
Chapter 10: Animation in React
Descarga:
Mastering_React
Etiquetas:
Actions,
Adam Horton,
Animation,
Application,
Blog,
Components,
Composition,
Forms,
JSX,
Libros,
Lifecycle,
Mastering,
Mixins,
Packt,
Posts,
React,
Ryan Vice,
Scroll,
Search,
Users
sábado, 2 de agosto de 2014
El Libro del Día: Pro ASP.NET MVC 4
El Libro del Día: 2014-08-02
Titulo: Pro ASP.NET MVC 4 (4th Edition)
Autor: Adam Freeman
Editorial: Apress
Nro Paginas: 738
Capítulos:
Part 1: Introducing ASP.NET MVC 4
Chapter 1: What’s the Big Idea?
Chapter 2: Your First MVC Application
Chapter 3: The MVC Pattern
Chapter 4: Essential Language Features
Chapter 5: Working with Razor
Chapter 6: Essential Tools for MVC
Chapter 7: SportsStore - A Real Application
Chapter 8: SportsStore: Navigation
Chapter 9: SportsStore: Completing the Cart
Chapter 10: SportsStore: Administration
Chapter 11: SportsStore: Security & Finishing Touches
Part 2: ASP.NET MVC 4 in Detail
Chapter 12: Overview of MVC Projects
Chapter 13: URL Routing
Chapter 14: Advanced Routing Features
Chapter 15: Controllers and Actions
Chapter 16: Filters
Chapter 17: Controller Extensibility
Chapter 18: Views
Chapter 19: Helper Methods
Chapter 20: Templated Helper Methods
Chapter 21: URL and Ajax Helper Methods
Chapter 22: Model Binding
Chapter 23: Model Validation
Chapter 24: Bundles and Display Modes
Chapter 25: Web API
Chapter 26: Deployment
Descarga:
Pro_ASPNET_MVC4
Titulo: Pro ASP.NET MVC 4 (4th Edition)
Autor: Adam Freeman
Editorial: Apress
Nro Paginas: 738
Capítulos:
Part 1: Introducing ASP.NET MVC 4
Chapter 1: What’s the Big Idea?
Chapter 2: Your First MVC Application
Chapter 3: The MVC Pattern
Chapter 4: Essential Language Features
Chapter 5: Working with Razor
Chapter 6: Essential Tools for MVC
Chapter 7: SportsStore - A Real Application
Chapter 8: SportsStore: Navigation
Chapter 9: SportsStore: Completing the Cart
Chapter 10: SportsStore: Administration
Chapter 11: SportsStore: Security & Finishing Touches
Part 2: ASP.NET MVC 4 in Detail
Chapter 12: Overview of MVC Projects
Chapter 13: URL Routing
Chapter 14: Advanced Routing Features
Chapter 15: Controllers and Actions
Chapter 16: Filters
Chapter 17: Controller Extensibility
Chapter 18: Views
Chapter 19: Helper Methods
Chapter 20: Templated Helper Methods
Chapter 21: URL and Ajax Helper Methods
Chapter 22: Model Binding
Chapter 23: Model Validation
Chapter 24: Bundles and Display Modes
Chapter 25: Web API
Chapter 26: Deployment
Descarga:
Pro_ASPNET_MVC4
Etiquetas:
Actions,
Adam Freeman,
AJAX,
Apress,
ASP .NET,
Bundles,
Controllers,
Deployment,
Filters,
Helpers,
Libros,
Model Binding,
Model Validation,
MVC 4,
Razor,
SportsStore,
URL Routing,
Views,
Web API
lunes, 23 de junio de 2014
El Demo del Día: Comparación de Rendimiento al Llenar Listas en WinForms
Comparación de Rendimiento al Llenar Listas en WinForms
En este post, compararemos el rendimiento de diferentes técnicas para llenar listas en Windows Forms desde un arreglo. En WinForms los controles ListBox, ComboBox, CheckedListBox y ListView tienen una colección de Items que representan los elementos del control. Aprenderemos varias formas de mejorar la performance o rendimiento al llenar controles de tipo listas.
Problema al Llenar Listas en WinForms
Si tenemos un arreglo con datos y queremos llenar un control de tipo lista en WinForms, muchos programadores crean un bucle (for, foreach, while) y leen del arreglo cada elemento y lo agregan al control lista. Si son muchos registros a agregar el tiempo aumenta considerablemente en proporción a la cantidad de filas y se nota un parpadeo al momento de pintar el control.
Solución al Problema de Llenar Listas en WinForms
Existen 2 formas de solucionar el problema del rendimiento al llenar un control lista desde un arreglo:
1. Usar el método AddRange de la colección de Items del control lista y agregar directamente el arreglo.
2. Usar el método BeginUpdate antes del bucle para congelar la actualización en pantalla de fila x fila y al final del bucle llamar al método EndUpdate para actualizar el pintado del control lista.
Diseño de la Aplicación WinForms
Crear una aplicación WinForms llamada: "Comparacion_Rendimiento_Listas" en C# y cambiar de nombre al formulario por "frmLista", luego agregar los siguientes controles:
- Un Control Label llamado "lblTiempoProcesamiento"
- Un Control ListBox llamado "lstNumero"
- Cinco Controles Button llamados: "btnLlenarArreglo", "btnLlenarListaForItemsAdd",
"btnLlenarListaAddRange", "btnLlenarListaForItemsAddBU" y "btnLlenarListaAddRangeBU".
Código Fuente de la Aplicación WinForms
En el código he creado un método "ejecutarMetodo" que tiene como parámetro un método gracias al tipo "Action" lo que me permite crear una rutina que permita "medir el tiempo de procesamiento de cualquier método" para poder comparar los tiempos en cada caso, para lo cual usamos la clase "Stopwatch" de "System.Diagnostics".
Además usamos un arreglo de cadenas, el cual lo llenamos con 10000 registros para poder ser pasados al control ListBox con las diferentes técnicas.
using System.Windows.Forms;
using System.Diagnostics;
namespace Comparacion_Rendimiento_Listas
{
public partial class frmLista : Form
{
private string[] lista;
public frmLista()
{
InitializeComponent();
}
public string ejecutarMetodo(Action metodo)
{
Stopwatch oReloj = new Stopwatch();
oReloj.Start();
metodo();
oReloj.Stop();
return (String.Format("Tiempo de Procesamiento: {0:n0} msg",
oReloj.Elapsed.TotalMilliseconds));
}
private void llenarArreglo()
{
lista=new string[10000];
for (int i = 0; i < lista.Length; i++)
{
lista[i] = i.ToString();
}
}
private void btnLlenarArreglo_Click(object sender, EventArgs e)
{
lblTiempoProcesamiento.Text = ejecutarMetodo(llenarArreglo);
}
private void llenarListaForItemsAdd()
{
lstNumero.Items.Clear();
for (int i = 0; i < lista.Length; i++)
{
lstNumero.Items.Add(lista[i]);
}
}
private void btnLlenarListaForItemsAdd_Click(object sender, EventArgs e)
{
lblTiempoProcesamiento.Text = ejecutarMetodo(llenarListaForItemsAdd);
}
private void llenarListaAddRange()
{
lstNumero.Items.Clear();
lstNumero.Items.AddRange(lista);
}
private void btnLlenarListaAddRange_Click(object sender, EventArgs e)
{
lblTiempoProcesamiento.Text = ejecutarMetodo(llenarListaAddRange);
}
private void llenarListaForItemsAddConBeginUpdate()
{
lstNumero.BeginUpdate();
lstNumero.Items.Clear();
for (int i = 0; i < lista.Length; i++)
{
lstNumero.Items.Add(lista[i]);
}
lstNumero.EndUpdate();
}
private void btnLlenarListaForItemsAddBU_Click(object sender, EventArgs e)
{
lblTiempoProcesamiento.Text = ejecutarMetodo(llenarListaForItemsAddConBeginUpdate);
}
private void llenarListaAddRangeConBeginUpdate()
{
lstNumero.BeginUpdate();
lstNumero.Items.Clear();
lstNumero.Items.AddRange(lista);
lstNumero.EndUpdate();
}
private void btnLlenarListaAddRangeBU_Click(object sender, EventArgs e)
{
lblTiempoProcesamiento.Text = ejecutarMetodo(llenarListaAddRangeConBeginUpdate);
}
}
}
Si ejecutamos la aplicación y damos clic al botón "Llenar Arreglo" notamos que el tiempo de procesamiento es de 2 msg (mili segundos), si damos clic al botón "Llenar Lista For Items Add" el tiempo de procesamiento es de 3306 msg (este puede variar cada vez que se da clic entre 2500 y 3500 aproximadamente), además en todo este tiempo se nota la aplicación en espera y con parpadeo.
Si damos clic al botón "Llenar Lista AddRange" o los otros 2 últimos botones (es decir las 3 formas de mejor rendimiento) notamos que el tiempo de procesamiento es de 69 msg (puede variar entre 60 y 80 msg).
Comentario Final
Después de hacer las comparaciones de rendimiento nos damos cuenta que la diferencia es extremadamente abismal, para 10000 filas el método clásico del bucle demora mas de 3000 msg mientras que las otras 3 técnicas solo 70 msg, es decir una diferencia de 3000, la cual aumenta con el aumento de los registros.
Después de esto, espero que ningún programador se olvide de colocar "BeginUpdate" antes del llenado de su lista y al final "EndUpdate" o use directamente el método AddRange.
Descarga:
Demo05_Rendimiento_Listas
En este post, compararemos el rendimiento de diferentes técnicas para llenar listas en Windows Forms desde un arreglo. En WinForms los controles ListBox, ComboBox, CheckedListBox y ListView tienen una colección de Items que representan los elementos del control. Aprenderemos varias formas de mejorar la performance o rendimiento al llenar controles de tipo listas.
Problema al Llenar Listas en WinForms
Si tenemos un arreglo con datos y queremos llenar un control de tipo lista en WinForms, muchos programadores crean un bucle (for, foreach, while) y leen del arreglo cada elemento y lo agregan al control lista. Si son muchos registros a agregar el tiempo aumenta considerablemente en proporción a la cantidad de filas y se nota un parpadeo al momento de pintar el control.
Solución al Problema de Llenar Listas en WinForms
Existen 2 formas de solucionar el problema del rendimiento al llenar un control lista desde un arreglo:
1. Usar el método AddRange de la colección de Items del control lista y agregar directamente el arreglo.
2. Usar el método BeginUpdate antes del bucle para congelar la actualización en pantalla de fila x fila y al final del bucle llamar al método EndUpdate para actualizar el pintado del control lista.
Diseño de la Aplicación WinForms
Crear una aplicación WinForms llamada: "Comparacion_Rendimiento_Listas" en C# y cambiar de nombre al formulario por "frmLista", luego agregar los siguientes controles:
- Un Control Label llamado "lblTiempoProcesamiento"
- Un Control ListBox llamado "lstNumero"
- Cinco Controles Button llamados: "btnLlenarArreglo", "btnLlenarListaForItemsAdd",
"btnLlenarListaAddRange", "btnLlenarListaForItemsAddBU" y "btnLlenarListaAddRangeBU".
Código Fuente de la Aplicación WinForms
En el código he creado un método "ejecutarMetodo" que tiene como parámetro un método gracias al tipo "Action" lo que me permite crear una rutina que permita "medir el tiempo de procesamiento de cualquier método" para poder comparar los tiempos en cada caso, para lo cual usamos la clase "Stopwatch" de "System.Diagnostics".
Además usamos un arreglo de cadenas, el cual lo llenamos con 10000 registros para poder ser pasados al control ListBox con las diferentes técnicas.
using System.Windows.Forms;
using System.Diagnostics;
namespace Comparacion_Rendimiento_Listas
{
public partial class frmLista : Form
{
private string[] lista;
public frmLista()
{
InitializeComponent();
}
public string ejecutarMetodo(Action metodo)
{
Stopwatch oReloj = new Stopwatch();
oReloj.Start();
metodo();
oReloj.Stop();
return (String.Format("Tiempo de Procesamiento: {0:n0} msg",
oReloj.Elapsed.TotalMilliseconds));
}
private void llenarArreglo()
{
lista=new string[10000];
for (int i = 0; i < lista.Length; i++)
{
lista[i] = i.ToString();
}
}
private void btnLlenarArreglo_Click(object sender, EventArgs e)
{
lblTiempoProcesamiento.Text = ejecutarMetodo(llenarArreglo);
}
private void llenarListaForItemsAdd()
{
lstNumero.Items.Clear();
for (int i = 0; i < lista.Length; i++)
{
lstNumero.Items.Add(lista[i]);
}
}
private void btnLlenarListaForItemsAdd_Click(object sender, EventArgs e)
{
lblTiempoProcesamiento.Text = ejecutarMetodo(llenarListaForItemsAdd);
}
private void llenarListaAddRange()
{
lstNumero.Items.Clear();
lstNumero.Items.AddRange(lista);
}
private void btnLlenarListaAddRange_Click(object sender, EventArgs e)
{
lblTiempoProcesamiento.Text = ejecutarMetodo(llenarListaAddRange);
}
private void llenarListaForItemsAddConBeginUpdate()
{
lstNumero.BeginUpdate();
lstNumero.Items.Clear();
for (int i = 0; i < lista.Length; i++)
{
lstNumero.Items.Add(lista[i]);
}
lstNumero.EndUpdate();
}
private void btnLlenarListaForItemsAddBU_Click(object sender, EventArgs e)
{
lblTiempoProcesamiento.Text = ejecutarMetodo(llenarListaForItemsAddConBeginUpdate);
}
private void llenarListaAddRangeConBeginUpdate()
{
lstNumero.BeginUpdate();
lstNumero.Items.Clear();
lstNumero.Items.AddRange(lista);
lstNumero.EndUpdate();
}
private void btnLlenarListaAddRangeBU_Click(object sender, EventArgs e)
{
lblTiempoProcesamiento.Text = ejecutarMetodo(llenarListaAddRangeConBeginUpdate);
}
}
}
Ejecución y Pruebas de la Aplicación WinForms
Si ejecutamos la aplicación y damos clic al botón "Llenar Arreglo" notamos que el tiempo de procesamiento es de 2 msg (mili segundos), si damos clic al botón "Llenar Lista For Items Add" el tiempo de procesamiento es de 3306 msg (este puede variar cada vez que se da clic entre 2500 y 3500 aproximadamente), además en todo este tiempo se nota la aplicación en espera y con parpadeo.
Si damos clic al botón "Llenar Lista AddRange" o los otros 2 últimos botones (es decir las 3 formas de mejor rendimiento) notamos que el tiempo de procesamiento es de 69 msg (puede variar entre 60 y 80 msg).
Comentario Final
Después de hacer las comparaciones de rendimiento nos damos cuenta que la diferencia es extremadamente abismal, para 10000 filas el método clásico del bucle demora mas de 3000 msg mientras que las otras 3 técnicas solo 70 msg, es decir una diferencia de 3000, la cual aumenta con el aumento de los registros.
Después de esto, espero que ningún programador se olvide de colocar "BeginUpdate" antes del llenado de su lista y al final "EndUpdate" o use directamente el método AddRange.
Descarga:
Demo05_Rendimiento_Listas
Etiquetas:
Actions,
Arrays,
C#,
Comparación,
Demos,
Lduenas,
Listas,
ListBox,
Performance,
Rendimiento,
Stopwatch,
WinForms
Suscribirse a:
Entradas (Atom)





