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: puntonet@mug.org.ar
<mailto:puntonet@mug.org.ar> ] 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] 

Responder a