Gabriel, Está bien tu ejemplo, o tambien podría ser:
Function Traer() as DataSet try Traer = CargarDatasetdesdeSQL catch Traer = New DataSet end try end function y despues validar que el dataset no esté vacio. Con respecto al funcionamiento de los parámetros por valor o por referencia me parece que concuerdan las dos explicaciones. Si tenés alguna duda decime que parte específicamente te parece contradictoria. Saludos. On 10/11/07, Gabriel Osorio <[EMAIL PROTECTED]> wrote: > > Hola Fabian > > > > Como que se entiende :-) > > > > Creo que contestas mi pregunta, pues la asignación estaría haciéndose > entre objetos que son instancias de clases. Sin embargo, tu ejemplo sería > algo así: > > > > Function Main() > > Dim myDs as Dataset > > If traer(myDs) then > > Hacer algo… > > End if > > End function > > > > Public function traer( byRef ds) as bolean > > try > > ds = LoDeSQL > > traer = true > > catch > > ds = new Dataset() > > traer = false > > end try > > end function > > > > > > Otra cosa, lo que dices, parece contradecir a la guía de inicio en punto > net: > > *La nueva opción predeterminada es el paso de argumentos por valor.* En > Visual Basic 6, si no se especifica explícitamente ByVal o ByRef en la > declaración de un parámetro, la llamada utiliza ByRef de forma > predeterminada. En el nuevo Visual Basic .NET, la opción predeterminada es > ByVal. Esto se aplica tanto a parámetros normales, para los cuales la > opción predeterminada se puede reemplazar especificando explícitamente > ByRef, como a parámetros que se pasan a un parámetro *ParamArray*, en el > que la opción predeterminada no puede reemplazarse. Este cambio se debe a > que es mucho más habitual utilizar un parámetro únicamente para pasar un > valor a un procedimiento que para alterar una variable asociada al > parámetro. Con ByVal como opción predeterminada, se aumenta el rendimiento > y se disminuye la probabilidad de efectos laterales accidentales. > > http://es.gotdotnet.com/quickstart/aspplus/doc/languagecompat.aspx > > > > > > Saludos > > > ------------------------------ > > *From:* puntonet@mug.org.ar [mailto:[EMAIL PROTECTED] *On Behalf Of *Fabián > Foos > *Sent:* Thursday, October 11, 2007 11:03 AM > *To:* puntonet@mug.org.ar > *Subject:* [puntonet] Preguntas varias > > > > Gabriel, > > Todas las asignaciones de objetos que son instancia de clases son por > referencia, las variables cuyo tipo son clase son siempre referencias. > Y si modificas una instancia de una clase recibida por parámetro dentro de > un procedimiento (no hablo de una asiganción) cuando vuelva del > procedimiento esa modificación se verá reflejada en el objeto que se paso > (todo esto sucede aunque se haya especificado ByVal en el argumento). > Si especificamos ByVal en un argumento se pasa una copia de la referencia > al procedimiento, o sea que si asignamos algo a esa referencia, cuando > retorne del procedimiento no se verá afectada la variable que pasamos. > En cambio, si especificamos ByRef en un argumento se pasa una referencia a > la referencia al procedimiento, o sea que si asignamos algo a esa > referencia, cuando retorne del procedimiento se verá reflejada en la > variable que pasamos. > > No se si entendió algo de lo que dije, jeje. > > Saludos! > > On 10/11/07, *Gabriel Osorio* <[EMAIL PROTECTED]> wrote: > > Pablo > > No soy muy ducho en VB.NET. > > Pregunta: Cuando se asigna una variable en VB.NET, se pasa por valor o por > referencia? > > La idea es que la variable que representa al método "traer" es del tipo > dataset. Al copiar por valor el dataset devuelto por el SQL, se puede > liberar la memoria asociada al objeto creado por el SQL sin afectar al > otro > objeto. > Lo que tú planteas es que se hace una asignación por referencia, de manera > > que ambas variables apuntan al mismo objeto en memoria. > > > Pero sigamos con las ideas, que tal esto? > http://www.java2s.com/Code/VB/Data-Structure/Disposecalledwhenweneeddisposin > > g.htm > > > Saludos > > > -----Original Message----- > From: puntonet@mug.org.ar [mailto:[EMAIL PROTECTED] On Behalf Of Pablo > A. > Allois > Sent: Thursday, October 11, 2007 9:14 AM > To: puntonet@mug.org.ar > Subject: [puntonet] Preguntas varias > > Dos detalles: > - La funcion esta devolviendo nothing > - Si devolviera el dataset, seria inutilizable despues de ejecutarle un > dispose > > Saludos! > > -----Mensaje original----- > De: puntonet@mug.org.ar [mailto: [EMAIL PROTECTED] En nombre de Gabriel > Osorio > Enviado el: Jueves, 11 de Octubre de 2007 11:03 a.m. > Para: puntonet@mug.org.ar > Asunto: [puntonet] Preguntas varias > > Una idea para el punto 1: > > Function traer() as dataset > Dim ds as new dataset > try > ds = CargarDatasetdesdeSQL > traer = ds > catch > > finally > ds.dispose() > ds = nothing 'Por si las moscas > end try > end function > > > -----Original Message----- > From: puntonet@mug.org.ar [mailto:[EMAIL PROTECTED] On Behalf Of > JATEMLIANSKY, Diego > Sent: Thursday, October 11, 2007 8:43 AM > To: puntonet@mug.org.ar > Subject: [puntonet] Preguntas varias > > Gente como andan ? > Tengo un par de preguntas para hacerles que nos están sacando el sueño y > que > tal vez con algunos tips que nos puedan dar nos puedan orientar un poco > como > encararlo. > > La arquitectura que tenemos es de FrontEnd en ASP.NET, BackEnd en > Servicios > de Windows VB.NET accedidos por Remoting y SQL Server. > (Todo esto instalado en servidores, no instalamos nada en las PC clientes) > > > Ahora les paso las preguntas (Todas con respecto a la parte del BackEnd en > donde tenemos todas las reglas de negocios y el grueso de la > codificacion): > > 1- Liberar memoria: > En algunos casos nos esta costando entender como hacer para > liberar > memoria. > Por un lado encontramos que nos recomiendan hacer los Dispose de > los > DataSets una vez utilizados y por otro lado también encontramos algunos > sites que recomiendan hacer un ds = nothing para liberar la memoria, cual > es > la opción mas recomendable? > > Por otro lado, que pasa si un método de nuestro BackEnd hace > solamente lo siguiente: > > Function traer() as dataset > Dim ds as new dataset > > ds = CargarDatasetdesdeSQL > > return ds > end function > > Como hacemos para liberar la memoria utilizada por este DataSet > (que > en algunos casos trae muchos datos para mostrar en pantalla) si después > del > return no podemos hacer mas nada. > > 2- Prioridad de procesos: > Tenemos varios procesos que son del tipo Batch, o sea, que el > usuario levanta un archivo y lo vamos procesando. > Estos procesos pueden llevar al procesador a consumir mas de lo > que > queremos y afectan al funcionamiento optimo del Server. (Ya que en el > Server > de BackEnd tenemos varios servicios corriendo y no podemos afectar a los > otros) > Como hacemos para establecer prioridades a estos procesos o > decirle > que solamente consuman hasta por Ej. un 30% o que tengan menor prioridad ? > O para que el Loop que hacemos con los registros del archivo no se > lleve todo el procesador. > (Estos procesos los tenemos que hacer OnLine, no podemos dejarlos > como procesos nocturnos) > > > Muchas Gracias. > > > > AVISO: El presente mensaje y los archivos adjuntos que incluya pueden > contener información confidencial de uso exclusivo del destinatario > indicado. Cualquier uso en desacuerdo con su propósito, difusión o > publicación, total o parcial, se encuentra prohibida. Si recibió este > mensaje por error, rogamos reenviarlo al emisor y destruir las copias > impresas o grabadas en su sistema. Las opiniones contenidas, son > exclusivas > de su autor y no representan necesariamente la opinión de OMINT S.A. de > Servicios. > > > > > > > > > > -- > Fabián Foos > (msn) [EMAIL PROTECTED] >