Comment puis-je obtenir une liste générique d'un DataTable avec le plus bas frais généraux?

StackOverflow https://stackoverflow.com/questions/1701539

  •  19-09-2019
  •  | 
  •  

Question

Je suis à la recherche des meilleures pratiques ici. Pardon. Je sais qu'il est subjective, mais il y a beaucoup de gens intelligents ici, donc il devrait y avoir une certaine façon « très bien » de le faire.

J'ai un objet personnalisé appelé employé. Cet objet a sept propriétés comme le nom, téléphone, e-mail, et ainsi de suite. Il y a aussi une table dans ma base de données SQL appelée tblEmployees avec sept colonnes marquées de la même un peu. Mon but est de « convertir » les résultats d'une requête à une liste générique des objets employés. Quelle est la meilleure façon de le faire (plus bas frais généraux, le plus rapide)?

Ce que je fais est actuellement quelque chose que j'ai vu proposé sur tout le web. Je ne l'aime pas parce que je me sens comme il ralentit mes charges de page. listes génériques me font plus vite à ce que je fais, mais je ne me sens pas bien faire mes clients paient le prix.

Voici ce que je fais:

List<Employee> list = new List<Employee>();
DataSet ds = Employee.searchEmployees("Byron");
foreach (DataRow dr in ds.Tables[0].Rows)
{
   list.Add(new Employee(dr));
}

I ai un constructeur qui prend un DataRow (comme représenté) qui gère l'étoffe 'propriété = dr [ "colonne"]'.

Dans l'attente de vos pensées.

Était-ce utile?

La solution

En bref regardant le code, et ne pas voir comment il est utilisé, je renvoie un IEnumerator au lieu d'une liste. Vous pouvez ensuite utiliser l'instruction de retour de rendement et vous ne serez pas en boucle dans la liste deux fois (pour remplir un et l'autre à afficher).

...

protected IEnumerable<Employee> GetEmployees ()
{
   List<Employee> list = new List<Employee>();
   DataSet ds = Employee.searchEmployees("Byron");

   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       yield return new Employee(dr);
   }
}

Autres conseils

Quelle partie du processus vous sentez-vous est lent? Votre méthodologie n'a pas de goulots d'étranglement flagrants pour autant que je peux voir.

Je suggère d'utiliser un OU Mapper comme cadre Linq2SQL ou entité

La raison de la construction d'une liste est de passer entre les fonctions du côté du serveur.

Quel est l'avantage de passer la liste au lieu de passer une référence DataSet ou même un DataTable?

Ces pensées de côté, ce que vous faites actuellement est une procédure standard pour la construction d'une liste. Comment pensez-vous pourriez-vous accélérer? En n'instanciation l'objet de l'employé? Vous pouvez ensuite faire sans l'objet employé qui serait probablement mess avec votre modèle d'entité.

Ce que vous faites est maintenant quelque chose qui doit être fait d'une façon ou d'une autre à un moment donné, et vous ne pouvez pas vraiment faire beaucoup plus rapidement que la façon dont vous avez décrit. Mais vous pouvez réduire le nombre de fois que vous devez le faire du tout en mettant en cache vos données.

Rangez la liste des clients dans le cache. Peupler sur démarrage de l'application par exemple. Quand quelque chose change un enregistrement de client vous mettez à jour le cache et sauvegarder l'enregistrement dans la base de données. Tout lit par tout utilisateur passera dans le cache, et non pas la base de données.

Cette approche sera généralement un ordre de grandeur plus rapide que toute approche qui frappe la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top