Originariamente inviato da simon78_soft
Per le performance non saprei risponderti, la differenza credo sia talmente piccola che proprio non so quale potrebbe essere piu' veloce...
Ti posso pero' dire questo:
- con "(byref ds as dataset)" passi un oggetto esistente
- con "private fuction ottieniDataSet() as dataset" crei un nuovo oggetto e quinid utilizzi sicuramente piu' risorse

Quindi, io personalmente ti consiglio di utilizzare "byref"... ma e' solo il mio parere personale...
Guarda che non è assolutamente vero... anzi, il ByRef è leggerissimissimamente più lento: infatti quando passi un oggetto ByVal ad una funzione tu in realtà stai passando un puntatore a tale oggetto (che è fisicamente allocato nell'heap), per cui che tu lo passi per valore (creando una copia del puntatore sullo stack - consumo di memoria: 4 byte) o che tu lo passi per riferimento (creando un puntatore che punta al puntatore all'oggetto, identico consumo di memoria) la differenza di impiego di memoria è nulla. Dico che il ByRef è leggerissimissimamente più lento perché per accedere all'oggetto stesso è necessario dereferenziare due puntatori al posto di uno; inoltre semanticamente è più corretto che l'oggetto da ottenere venga restituito come valore di ritorno.
In ogni caso le tue considerazioni risultano corrette se parliamo di strutture (Struct), che vengono allocate sullo stack e non sull'heap.