Ayer publiqué un artículo sobre cómo maximizar el rendimiento de .NET. Muchas gracias por sus comentarios. Algunos de ellos señalaron algunos errores en el artículo. se ha beneficiado mucho.
El artículo de ayer se centró principalmente en mejorar la velocidad a partir de algunos detalles de la escritura de código. Puede ser difícil sentir realmente la mejora del rendimiento, pero como programador, mejorar constantemente la calidad de su propio código es el objetivo que persigue constantemente.
De hecho, con el desarrollo del hardware, la velocidad del hardware ahora satisface con creces las necesidades de la mayoría de las personas. Algunas personas incluso sugieren que los algoritmos son cada vez menos efectivos en el desarrollo de software actual. Recuerdo haber visto un video sobre estructura de datos del MIT antes, y el profesor que impartió la conferencia hizo una pregunta (no lo recuerdo claramente, pero esto es lo que quiso decir): dado que los algoritmos ya no son importantes, ¿por qué seguimos aquí? ¿Qué pasa con la investigación? La respuesta que dio fue "VELOCIDAD". ¡Perseguimos la velocidad tal como los pilotos persiguen la velocidad!
En el desarrollo de muchos sistemas hoy en día, la velocidad no es la primera prioridad. A menudo se da máxima prioridad a otros como la estabilidad, la seguridad, la reutilización, etc. Hoy en día, los patrones de diseño, la arquitectura de desarrollo, etc. no están diseñados principalmente para resolver problemas de rendimiento. Los analistas y arquitectos consideran lo anterior. Los pequeños programadores como nosotros solo pueden optimizar el programa en algunos lugares pequeños del código, una clase, un método y una línea de código. Creo que es bueno prestar más atención a los detalles.
Bien, basta de tonterías, hablemos del tema de hoy. La sobrecarga de rendimiento de muchos sistemas de red desarrollados ahora se debe principalmente a la lectura y transmisión de datos. Una velocidad de lectura más rápida y un menor uso del ancho de banda de la red son los objetivos que perseguimos. Hablaré sobre cómo mejorar el rendimiento de .net desde este aspecto.
1. Paginación de datos en la capa de datos. Se puede implementar a través de ExcuteReader o procedimientos almacenados. Hay muchos métodos, por lo que no entraré en detalles (puedes leer lo que escribí)
2. Intente usar ExcuteReader para leer datos. PetShop 4.0, se puede acceder a todos los datos. Todos se implementan mediante ExcuteReader, a menos que tenga requisitos especiales para la falta de conexión (como SmartClient, etc.).
3. En situaciones no conectadas, usar DataTable tiene mejor rendimiento que usar DataSet, a menos que desee guardar varias tablas relacionales.
4. Utilice el método ImportRow de DataTable.
En algunos casos, es necesario copiar una gran cantidad de datos de un DataTable a otro. El uso del método ImportRow de DataTable puede mejorar enormemente el rendimiento. Cuando la cantidad de datos es pequeña, no hay mucha diferencia. Alcanza más de 10,000 filas, se puede mejorar significativamente y puede llegar varias veces.
5. Serializar datos en archivos binarios para facilitar la transmisión.
Cuando procesamos objetos DataSet y DataTable, podemos serializarlos en archivos XML. Si se van a transmitir a través de la red, los archivos XML causarán problemas de recursos como la memoria y el ancho de banda de la red. En este momento, podemos serializarlo en un archivo binario, de modo que los archivos generados se reducirán mucho. El código es el siguiente:
FileStream fs = nuevo fileStream(@"XMLData.bin",FileMode.Create);
BinaryFormatter bf = nuevo BinaryFormatter();
bf.Serialize(fs,XMLData);
fs.colse();
El archivo binario generado de esta manera se llama XMLBinary. Si lo abre directamente con WINHEX, puede ver algunas etiquetas XML en él. Si la cantidad de datos es grande, agregue una línea de código:
XMLData.RemortingFormat = SerializationFormat.Binary;
El archivo generado en este momento se denomina archivo TrueBinary. Cuando se procesa una gran cantidad (más de 10,000 líneas), el tamaño del archivo generado es una fracción de XMLBinary. El esquema se guarda automáticamente durante la serialización, lo que simplifica el proceso de desecuenciación. Todavía no sé en qué medida se comparará la caída de rendimiento de la deserialización con la lectura del XML directamente.
6. Hacer un uso razonable de los grupos de conexiones.
La agrupación de conexiones juega un papel importante en la mejora del rendimiento y está activada de forma predeterminada. El tamaño mínimo predeterminado del grupo es 0, que generalmente se establece en un valor relativamente pequeño, como 5. El tamaño máximo del grupo predeterminado es 100, que es suficiente para la mayoría de los sitios WEB. Para los grandes, increméntelo adecuadamente.
7. Desarrollar usando SQLCLR
Si se centra en abrir la serie SQL Server, debería estudiar SQLCLR. Es muy potente y puede mejorar el rendimiento en muchas situaciones (especialmente en aplicaciones de nivel empresarial grandes).
8. Acceda a APP.Config/Web.Config a través de clases estáticas
Tenemos mucha información de configuración en APP.Config/Web.Config, a la que se accede con mucha frecuencia. En este momento, creamos una clase estática. Se accede a todos los atributos a través de la clase estática, lo que puede mejorar el rendimiento hasta cierto punto. La clase estática solo instancia Config una vez, y APP.Config/Web.Config generará muchas operaciones de IO.
clase estática pública MyWebConfig
{
MyWebConfig estático()
{
CadenaConn =
ConfigurationManager.ConnectionStrings["Conexión"].
Cadena de conexión;
}
cadena estática pública DbConnectionString
{
conseguir
{
devolver ConnString;
}
}
}
Bien, eso es todo por hoy. Me gustaría señalar los errores y deficiencias. Pueden presentar mejores opiniones y avanzar juntos.