Hier, j'ai publié un article sur la façon d'optimiser les performances de .NET. Il y a eu de nombreux commentaires. Merci beaucoup pour vos commentaires. Certains d'entre eux ont souligné certaines erreurs dans l'article. Je voudrais remercier ceux qui ont patiemment écrit des commentaires. a beaucoup bénéficié.
L'article d'hier s'est principalement concentré sur l'amélioration de la vitesse de certains détails d'écriture de code. Il peut être difficile de réellement ressentir l'amélioration des performances, mais en tant que programmeur, améliorer constamment la qualité de votre propre code est l'objectif que vous poursuivez constamment.
En fait, avec le développement du matériel, la vitesse du matériel répond désormais de loin aux besoins de la plupart des gens. Certains suggèrent même que les algorithmes deviennent de moins en moins efficaces dans le développement logiciel actuel. Je me souviens avoir déjà regardé une vidéo sur la structure des données du MIT, et le professeur qui a donné la conférence a posé une question (je ne m'en souviens pas très bien, mais c'est ce qu'il voulait dire) : Puisque les algorithmes ne sont plus importants, pourquoi sommes-nous toujours là ? Et la recherche ? La réponse qu'il a donnée était « VITESSE ». Nous recherchons la vitesse tout comme les pilotes de course recherchent la vitesse !
De nos jours, dans le développement de nombreux systèmes, la vitesse n'est pas la première priorité. D'autres, comme la stabilité, la sécurité, la réutilisabilité, etc., sont souvent prioritaires. De nos jours, les modèles de conception, l’architecture de développement, etc. ne sont pas principalement conçus pour résoudre des problèmes de performances. Les éléments ci-dessus sont pris en compte par les analystes et les architectes. Les petits programmeurs comme nous ne peuvent optimiser le programme qu'à quelques petits endroits du code, d'une classe, d'une méthode et d'une ligne de code. Je pense que c'est bien de prêter plus d'attention aux détails.
D'accord, assez de bêtises, parlons du sujet d'aujourd'hui. La surcharge de performances de nombreux systèmes réseau développés actuellement concerne principalement la lecture et la transmission des données. Une vitesse de lecture plus rapide et une utilisation moindre de la bande passante du réseau sont les objectifs que nous poursuivons. Je parlerai de la façon d'améliorer les performances de .net sous cet aspect.
1. Pagination des données dans la couche de données. Il peut être implémenté via ExcuteReader ou des procédures stockées. Il existe de nombreuses méthodes, je n'entrerai donc pas dans les détails (vous pouvez lire ce que j'ai écrit)
2. Essayez d'utiliser ExcuteReader pour lire des données. PetShop 4.0, toutes les données sont accessibles. Elles sont toutes implémentées à l'aide d'ExcuteReader, sauf si vous avez des exigences particulières en matière de non-connexion (telles que SmartClient, etc.).
3. Dans les situations non connectées, l'utilisation de DataTable offre de meilleures performances que l'utilisation de DataSet, sauf si vous souhaitez enregistrer plusieurs tables relationnelles.
4. Utilisez la méthode ImportRow de DataTable.
Dans certains cas, il est nécessaire de copier une grande quantité de données d'un DataTable à un autre. L'utilisation de la méthode ImportRow de DataTable peut améliorer considérablement les performances. Lorsque la quantité de données est faible, il n'y a pas beaucoup de différence. atteint plus de 10 000 lignes, il peut être considérablement amélioré et peut atteindre plusieurs fois.
5. Sérialisez les données dans des fichiers binaires pour une transmission facile.
Lorsque nous traitons des objets DataSet et DataTable, nous pouvons les sérialiser en fichiers XML. S'ils doivent être transmis sur le réseau, les fichiers XML entraîneront des problèmes de ressources tels que la mémoire et la bande passante du réseau. À ce stade, nous pouvons le sérialiser dans un fichier binaire, afin que les fichiers générés soient considérablement réduits. Le code est le suivant :
FileStream fs = nouveau fileStream (@"XMLData.bin",FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs,XMLData);
fs.colse();
Le fichier binaire ainsi généré s'appelle XMLBinary Si vous l'ouvrez directement avec WINHEX, vous pouvez y voir des balises XML. Si la quantité de données est importante, ajoutez une ligne de code :
XMLData.RemortingFormat = SerializationFormat.Binary ;
Le fichier généré à ce moment est appelé fichier TrueBinary. Lors du traitement d'un grand nombre (plus de 10 000 lignes), la taille du fichier généré est une fraction de XMLBinary. Le schéma est automatiquement enregistré lors de la sérialisation, ce qui simplifie le processus de déséquençage. Je ne sais pas encore à quel point la baisse de performances de la désérialisation sera comparée à la lecture directe du XML.
6. Faites un usage raisonnable des pools de connexions.
Le regroupement de connexions joue un rôle important dans l’amélioration des performances et est activé par défaut. La taille minimale du pool par défaut est 0, qui est généralement définie sur une valeur relativement petite, telle que 5. La taille maximale du pool par défaut est de 100, ce qui est suffisant pour la plupart des sites WEB. Pour les grands, augmentez-la en conséquence.
7. Développer à l'aide de SQLCLR
Si vous vous concentrez sur l'ouverture de la série SQL Server, vous devriez étudier SQLCLR. Il est très puissant et peut améliorer les performances dans de nombreuses situations (en particulier les grandes applications au niveau de l'entreprise).
8. Accédez à APP.Config/Web.Config via des classes statiques
Nous avons beaucoup d'informations de configuration dans APP.Config/Web.Config, qui sont consultées très fréquemment. À l'heure actuelle, nous créons une classe statique. Tous les attributs sont accessibles via la classe statique, ce qui peut améliorer les performances dans une certaine mesure. La classe statique n'instance Config qu'une seule fois et APP.Config/Web.Config générera de nombreuses opérations d'E/S.
classe statique publique MyWebConfig
{
statique MyWebConfig()
{
Chaîne de connexion =
ConfigurationManager.ConnectionStrings["Connexion"].
Chaîne de connexion ;
}
chaîne statique publique DbConnectionString
{
obtenir
{
renvoie ConnString ;
}
}
}
D'accord, c'est tout pour aujourd'hui. Je voudrais signaler toutes les erreurs et lacunes. Vous êtes invités à proposer de meilleures opinions et à progresser ensemble.