Question

J'ai une requête SQL qui peut ramener un grand nombre de lignes via un DataReader. Je viens tout juste d'interroger la base de données pour transformer le jeu de résultats en une liste (de) et les données lient la grille à la liste.

Cela peut parfois entraîner un dépassement de délai en raison de la taille du jeu de données.

J'ai actuellement trois configurations où l'interface utilisateur agit sur la liste des objets de la couche de gestion.

Quelqu'un peut-il suggérer la meilleure approche pour implémenter le chargement paresseux dans ce scénario? ou y a-t-il un autre moyen de mettre cela en œuvre proprement?

J'utilise actuellement Visual Studio 2005, .NET 2.0

EDIT: Comment utiliser la pagination dans ce cas?

Était-ce utile?

La solution

LINQ to SQL semble avoir du sens dans votre situation.

Sinon, si pour une raison quelconque, vous ne souhaitez pas utiliser LINQ to SQL (par exemple, vous êtes sur .NET 2.0), envisagez d'écrire un itérateur qui lit DataReader et le convertit au format approprié. objet:

IEnumerator<MyObject> ReadDataReader() {
  while(reader.MoveNext())
    yield return FetchObject(reader);
}

Autres conseils

Avez-vous besoin de ramener toutes les données à la fois? Vous pouvez envisager la pagination.

La pagination pourrait être votre meilleure solution. Si vous utilisez SQL Server 2005 ou supérieur, une nouvelle fonctionnalité a été ajoutée. ROWNUMBER () :

WITH MyThings AS
(
    SELECT ThingID, DateEntered,
    ROW_NUMBER() OVER (ORDER BY DateEntered) AS 'RowNumber'
    FROM dbo.Things 
) 
SELECT * 
FROM ThingDetails
WHERE RowNumber BETWEEN 50 AND 60;

Il existe un exemple de David Hayden qui est très utile pour démontrer le code SQL.

Cette méthode réduirait le nombre d'enregistrements renvoyés, réduisant ainsi le temps de chargement global. Cela signifie que vous devrez en faire un peu plus pour savoir où vous en êtes dans la séquence des enregistrements, mais cela en vaut la peine.
La technique de pagination standard exige que tous les éléments reviennent de la base de données et soient ensuite filtrés au niveau intermédiaire ou au niveau client (code-behind). Cette méthode réduit les enregistrements à un sous-ensemble plus gérable.

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