Dans .NET, les mises à jour fréquentes d'un DataGridView peuvent devenir coûteuses en termes de calcul, en particulier lorsqu'il s'agit de grands ensembles de données et de taux de mise à jour élevés. Cet article explore le problème des mises à jour lentes de DataGridView et propose des solutions pour améliorer l'efficacité dans les scénarios de transfert de données rapides.
L'exemple de code donné implique de recevoir des données sur le réseau et de les analyser dans un DataTable (dataSet). Utilisez une minuterie pour déclencher les mises à jour d'un DataGridView en utilisant un DataSet comme source de données. Cependant, bien que l'intervalle de minuterie soit défini sur 0,1 seconde, le taux de rafraîchissement de DataGridView est toujours limité à environ une fois par seconde.
Ce goulot d'étranglement est principalement dû au processus fastidieux de mise à jour de la source de données DataGridView. La reliure de l’intégralité de l’ensemble de données à chaque mise à jour provoque des redessins et un scintillement excessifs.
Pour atténuer ce problème et améliorer l'efficacité de la mise à jour, vous pouvez utiliser la double mise en mémoire tampon pour DataGridView. La double mise en mémoire tampon crée une image hors écran dans laquelle toutes les modifications apportées à l'apparence d'un contrôle sont rendues en premier. Une fois la modification effectuée, l'image hors écran est rapidement remplacée par l'image à l'écran, ce qui permet d'obtenir une expérience visuelle plus fluide et plus réactive.
Il existe deux manières principales d'activer la double mise en mémoire tampon dans DataGridView :
Méthodes basées sur les sous-classes :
<code>public class DBDataGridView : DataGridView { public new bool DoubleBuffered { get { return base.DoubleBuffered; } set { base.DoubleBuffered = value; } } public DBDataGridView() { DoubleBuffered = true; } }</code>
Méthode basée sur la réflexion :
<code>using System.Reflection; static void SetDoubleBuffer(Control ctl, bool DoubleBuffered) { typeof(Control).InvokeMember("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty, null, ctl, new object[] { DoubleBuffered }); }</code>
Une fois l'une de ces deux méthodes implémentée, la double mise en mémoire tampon peut être activée pour DataGridView, améliorant considérablement les performances lors de la mise à jour fréquente de grands ensembles de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!