Domanda

Sto cercando di prendere una decisione su come visualizzare i miei dati. Quello che ho ora è un elenco dei prodotti esposti in un ripetitore. Ma per il codice di manutenzione ho messo i miei oggetti prodotti in un controllo utente separato e li carico in un ciclo con risultati db utilizzando LoadControl.

Il controllo del prodotto in sé è molto semplice, basta un paio di proprietà pubbliche come titolo, url, voto ma non sono sicuro se questo influenzerà la mia prestazione. Ho fatto qualche lettura qui e su forum e alcune persone dire che non è la pratica migliore, soprattutto se si dispone di più di 20 o 30 di questi controlli.

Quindi, è davvero una performance colpito con questo metodo o lo fa stare bene con circa 10.000 contatti al giorno. Eventuali altri suggerimenti sono i benvenuti pure.

È stato utile?

Soluzione

Ho fatto alcuni test perché ero interessato a questo pure, e sembra che ci sia come un piuttosto significativo calo di prestazioni sulla LoadControl rispetto a un'istanza di una classe normale.

Ho provato la creazione di 100.000 istanze di una semplice classe con una proprietà vs 100.000 istanze di LoadControl caricamento di un nuovo controllo in bianco. Ed è stato 16ms per le classi vs 1950ms per il controllo del carico. Sembra che ci sia un sacco di spese generali. Ho notato che se ho aggiunto più controlli costitutivi al controllo utente il tempo di caricamento è salito. (Questo è solo il carico non ho effettivamente aggiungere i controlli alla pagina o rendering)

E 'abbastanza di un colpo ad essere evidente a un utente? Probabilmente no, a meno che si sta caricando una grande quantità di istanze con LoadControl.

Altri suggerimenti

Credo che per fare un controllo utente separato per ciascun prodotto, probabilmente non è il modo migliore per andare.

Tuttavia, si è già in parte in cui è necessario essere per il mio suggerimento.

Perché non fare una classe per il vostro prodotto, con tutte le proprietà che hai già definito nel controllo utente.

Quando si recuperano i prodotti si sta visualizzando, recuperare una collezione di prodotti (ciclo tra i record e creare la collezione) (Lista per esempio), e utilizzare la collezione come il DataSource per il ripetitore.

Quando si utilizza Page.LoadControl all'interno di un ciclo, separarla in una propria funzione e questo vi dirà ASP.Net per memorizzare nella cache il controllo, invece di caricarlo dal disco ogni volta.

Esempio: (VB)

Private Function LoadMyControl() As myCustomControl1
    Return Page.LoadControl("....")
End Function

Quindi ...

For each [....]
   Dim myCtrl1 as myCustomControl1 LoadMyControl()
   myCtrl1.prop1 = "blah"
   myPlaceholder1.Controls.Add(myCtrl1)
Next

Con l'incapsulamento all'interno di una chiamata di funzione il motore di cache pensa che sia il controllo stesso utente (che è) e accederà solo il disco una volta, accelerando l'alto in modo significativo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top