Sto utilizzando NHibernate per ORM e ho consolidato il caricamento di molte entità in un'unica grande query.La latenza di NHibernate è molto alta
In realtà sto caricando un dizionario di parole, circa 500.000 voci e ogni parola si riferisce ad altre. L'esecuzione del processo di caricamento in background potrebbe essere molto complicata nella nostra applicazione, in quanto dovremmo caricare manualmente una voce che non è stata caricata in tempo, poiché qualsiasi parola potrebbe essere richiesta in qualsiasi momento. I nostri unici requisiti sono che tutti i dati vengano caricati il più velocemente possibile. Ho anche provato ad usare una sessione senza stato, ma ho ottenuto un'eccezione che le sessioni stateless non possono recuperare le raccolte (per qualche motivo, forse ha a che fare con il fatto che non ci sono cache per le sessioni stateless?)
Il problema è che sebbene la query richieda non più di 25 secondi in SQLServer, occorrono oltre 3 minuti per ICriteria.List().
Ho utilizzato NHProf per profilare il processo di caricamento e ho scoperto che la creazione delle entità è un'operazione costosa, che occupa la maggior parte del tempo di caricamento in NHibernate.
C'è qualcosa che posso fare per ridurre questa latenza? L'allocazione di memoria è costosa o è la "compilazione" dei dati?
Grazie!
Grazie per la rapida risposta! Sto provando a caricare più di 500K righe, ognuna delle quali è un'entità. Ogni entità può puntare ad altre entità. Sto cercando di popolare questa lista il più velocemente possibile con tutte queste relazioni interpersonali. Non sto scrivendo nulla sul DB, ma dopo aver sperimentato con il caricamento pigro, ho trovato che non soddisfa i miei bisogni. La prossima cosa migliore che potrei pensare è in qualche modo caricare i dati in un thread diverso in una sorta di modello produttore-consumatore, ma non ho idea di come lo si faccia. Qualche idea? Avete suggerimenti per altre tecnologie? Grazie! –
Non ho ancora idea del motivo per cui vorrai caricare così tante entità correlate. Ciò rende difficile dare suggerimenti. Caricare i dati in background può avere senso, ma solo se la tua app può iniziare a fare tutto ciò che è necessario fare senza tutti i dati in atto. In breve, dicci cosa vuoi ottenere, quali sono le tue esigenze, forse allora possiamo darti un suggerimento adeguato o due. – tijmenvdk
In realtà sto caricando un dizionario di parole, quando ogni parola si riferisce ad altri. La cosa di sfondo potrebbe essere molto complicata nella nostra applicazione, in quanto dovremmo caricare manualmente una voce che non è stata caricata prima. Il problema è che una di quelle parole potrebbe essere richiesta in qualsiasi momento. I nostri unici requisiti sono che tutti i dati vengano caricati il più velocemente possibile. Ho anche provato ad usare una sessione senza stato, ma ho ottenuto un'eccezione nel fatto che le sessioni stateless non possono recuperare le raccolte ... –