2013-06-18 12 views
6

Mi diverto con i provider di tipi, in particolare il provider di tipi di struttura di entità sql. Sto scrivendo test su un database che ha un sacco di oggetti, ed è remoto quindi la connessione è un po 'lenta. ogni volta che costruisco il progetto ci vuole molto tempo, buoni minuti per completare la compilazione.I provider di tipo F # molto molto lento build

cosa mi manca perché il compilatore non memorizza nella cache le informazioni sul tipo?

P.S. È ancora peggio con F # interattivo ....

+0

Cosa stai benchmarking contro che si considera questo è lento? Qual è il tuo punto di confronto? Voglio dire, hai provato i Type Provider contro un back-end diverso? Vota per chiudere perché questa è una domanda troppo ampia. –

+1

Una build che richiede diversi minuti ogni volta richiede troppo tempo ... rispetto a qualsiasi altra build. –

+0

Una build che richiede diversi minuti ogni volta? Lavoravo su un'applicazione C++ commerciale che richiedeva mezz'ora per essere costruita ogni volta che la costruivamo, e ciò avveniva dopo diversi cicli di ottimizzazione. A meno che tu non stia creando codice giocattolo ogni volta, la compilazione richiederà del tempo. Dire "è troppo lento" è un po 'come un utente finale che dice "è troppo difficile da usare" - vago e piuttosto inutile. –

risposta

9

Provare a utilizzare l'attributo LocalSchemaFile per il fornitore di dati. Questo punta a un file .csdl che viene utilizzato per generare i tipi. È possibile impostare il provider del tipo per aggiornare questo file impostando l'attributo ForceUpdate su true. Per eseguire da uno schema memorizzato nella cache è sufficiente impostare ForceUpdate su false. Ecco come faccio questo con il provider SqlDataConnection, che è molto simile al provider SqlEntityConnection.

type schema = SqlDataConnection< LocalSchemaFile = "Schema.dbml", ForceUpdate = false, ConnectionString = @"Data Source=<insert your connection string here>" > 
0

Oltre a quello che può essere definito come un 'costruire lento', (se si è in rosso verde cerchio sviluppo TDD, sviluppa rapidamente diventato lento!), Ho spostato il mio tipo di client codice del provider ad un progetto separato. Avevo già impostato ForceUpdate su false, ma le build erano ancora lente (a quanto pareva ancora un controllo in background dei file dbml generati, nel mio caso i file wsdlschema in realtà).

Dopo aver spostato tutto il codice del provider di tipi in progetti separati, le build sono state notevolmente più veloci!

Nota: caricando il interattivo è stato ancora più rapido, solo è necessario aggiungere il riferimento al dll per i tipi