Détails de l'optimisation des performances C#
1 Utilisez ItemArray pour implémenter l'affectation par lots de DataRow
Lors de l'attribution de valeurs à tous les champs de DataRow, l'utilisation de noms de champs pour l'affectation colonne par colonne est inefficace. À ce stade, l’attribution de champs par lots doit être utilisée autant que possible. Vous pouvez utiliser la méthode ItemArray ou rows.Add :
/ ds是数据集(DataSet)对象 DataTable dt = ds.Tables[0]; DataRow row = dt.NewRow(); row.ItemArray = new object[] { value1, value2, …, valuen }; // ds是数据集(DataSet)对象 DataTable dt = ds.Tables[0]; dt.Rows.Add(value1, value2, …, valuen); //应避免做大量连续的单列赋值,如下: DataTable dt = ds.Tables[0]; DataRow row = dt.NewRow(); row["col1"] = value1; row["col2"] = value2; … row["coln"] = valuen;
2. Utilisation raisonnable du calcul parallèle de DataTable
Le calcul parallèle intégré de DataTable peut utiliser pleinement chaque processeur de l'ordinateur pour optimiser l'efficacité.
IEnumerable<DataRow> FindRows() //查找所有数量小于0的分录 { DataTable dt = ItemDataTable; …… return dt.Select(“Quantity<0”); //未使用并行计算 } IEnumerable<DataRow> FindRows() //查找所有数量小于0的分录 { DataTable dt = ItemDataTable; …… int index = dt.Columns.IndexOf("Quantity"); return dt.AsEnumerable().AsParallel().Where(dr => (decimal)dr[index] < 0); //使用并行计算: }
D'après les expériences, lorsque Le calcul parallèle de DataTable est meilleur que le filtrage de sélection et de boucle lors de la sélection de lignes ; les performances sont similaires lors de l'exécution du parcours de lignes.
3. Utilisez ImportRow pour fusionner des tables de données avec la même structure
L'utilisation de la méthode Merge peut facilement réaliser la fusion de DataTables, mais l'efficacité de Merge est très mauvaise ; l'exemple est le suivant :
DataTable[] srcTables = ... ; foreach(DataTable src in srcTables ) { dest.Merge( src ) ; }
ImportRow peut également implémenter l'opération de fusion de DataTable, et ses performances sont bien supérieures à celles de Merge. L'exemple de code est le suivant :
DataTable[] srcTables = ... ; foreach(DataTable src in srcTables ) { foreach(DataRow row in src.Rows) { dest.ImportRow( row ) ; } }
À suivre
Ce qui précède est le contenu des meilleures pratiques en matière de performances de C# DataSet. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !