Página 1 de 2
Usar objetos
Enviado: 17 Jul 2023 13:55
por JoséQuintas
Tem muita briga de LIB, lib isso, lib aquilo, objeto, não objeto.....
E coisa importante, nada....
Uma coisa que nunca saiu da minha cabeça:
Isso acima cria a variável grande, e repassa pra função, ocupando o dobro do espaço.
E com classes/objetos ? o que acontece ?
O objeto vai ser multiplicando conforme vai passando por funções ?
Pois é... não importa a lib... é uma informação muito interessante.
Não faço idéia da resposta.
Será que é igual array? que entra como referência automaticamente?
E mesmo array, não é exatamente igual passar variável por referência... talvez seja interessante usar de outro jeito.
Usar objetos
Enviado: 18 Jul 2023 16:03
por Kapiaba
Mister Quintas, eu não entendi ONDE ESTÁ o OBJETO neste seu exemplo. Para mim, isto é APENAS uma VARÁVEL LOCAL.
Para mim, OBJETO é isso. Por exemplo:
Código: Selecionar todos
LOCAL aGet := ARRAY(10), cVar1,,, etc.
LOCAL oBotao1 // Objeto do Botao 1
REDEFINE GET aGet[1] VAR cVar2...
REDEFINE GET aGet[2] VAR cVar3..
REDEFINE GET aGet[3] VAR cVar4..
REDEFINE GET aGet[4] VAR cVar5..
REDEFINE GET aGet[5] VAR cVar6..
REDEFINE BUTTON oBotao1 ID 301 OF oDlg(objeto do dialogo(etc)
etc
Como não entendi o que quisetes dizer, explique-se melhor e o que uma .LIB tem com isso.
So sorry.
Abs.
Usar objetos
Enviado: 18 Jul 2023 16:16
por JoséQuintas
O fonte é exemplo de como passar por parâmetro pode gastar muita memória sem se perceber, e o exemplo usa string.
E o que acontece com objetos?
Código: Selecionar todos
x := x():New()
x:y := Space(1000)
funcao( x )
...
CLASS x
VAR y
ENDCLASS
Usar objetos
Enviado: 20 Jul 2023 12:59
por Kapiaba
Continuo sem entender onde está o OBJETO no seu exemplo.
Pode por gentileza fazer um EXEMPLO prático explicando o que queres dizer exatamente?
Eu hein....
Isto são objetos:
Código: Selecionar todos
LOCAL oBtnImp AS OBJECT
LOCAL oDlgImp AS OBJECT
LOCAL oFnt AS OBJECT
LOCAL oFont AS OBJECT
LOCAL oSaida AS OBJECT
LOCAL oGroup AS OBJECT
LOCAL oAprovado AS OBJECT
LOCAL oIndeferido AS OBJECT
LOCAL oPendente AS OBJECT
LOCAL oImpGeral AS OBJECT
LOCAL oCobrado AS OBJECT
LOCAL DeOndeVemImp, aGrad // variaveis comuns.
Regards, saludos.
Usar objetos
Enviado: 20 Jul 2023 15:00
por Itamar M. Lins Jr.
Olá!
Continuo sem entender onde está o OBJETO no seu exemplo.
Qualquer coisa é objeto.
Mas quando falamos objeto é pq estamos usando OOP. CLASSES e dentro os MÉTODOS!
Dizer que "VariavelTal as object" é que não quer dizer nada para quem programa.
Qual é a diferença "VariavelTal as object" para "VariavelTal as numeric" ?
Isso é só declaração de variáveis sem conteúdo nenhum.
No exemplo do Quintas o objeto é o X que é uma CLASSE também, entendeu ?
x := X():New() -> x é um objeto que chama a classe X...
Saudações,
Itamar M. Lins Jr.
Usar objetos
Enviado: 20 Jul 2023 17:34
por JoséQuintas
Código: Selecionar todos
#include "inkey.ch"
#include "hbgtinfo.ch"
#include "hbclass.ch"
REQUEST HB_CODEPAGE_PTISO
PROCEDURE Main
LOCAL nKey := 0, x
SET EVENTMASK TO INKEY_ALL - INKEY_MOVE
Set( _SET_CODEPAGE, "PTISO" )
SetMode(36,132)
SetColor( "W/B" )
CLS
? Memory(1001)
x := QualquerClasse():New()
x:y := Space(100000000)
? Memory(1001)
z( x )
? Len( x:y )
z( x )
? Memory(1001)
hb_ThreadStart( { || DispOut( Memory(1001) ), z( x:y ), DispOut( Memory(1001) ) } )
hb_ThreadStart( { || DispOut( Memory(1001) ), z( x:y ), DispOut( Memory(1001) ) } )
hb_ThreadStart( { || DispOut( Memory(1001) ), z( x:y ), DispOut( Memory(1001) ) } )
DO WHILE nKey != K_ESC
nKey := Inkey(0)
ENDDO
RETURN
CREATE CLASS QualquerClasse
VAR y
ENDCLASS
FUNCTION z( x )
LOCAL k
k := x
(k)
? Memory(1001)
RETURN x
Se alguém conseguir interpretar isso, porque não entendi nada.
Usar objetos
Enviado: 20 Jul 2023 17:42
por JoséQuintas
Código: Selecionar todos
? Memory(THISTEST)
x := Array(20)
AFill( x, Space(100000000) )
? Memory(THISTEST)
DO WHILE nKey != K_ESC
nKey := Inkey(0)
ENDDO
RETURN
Ou isso acima.
Uso de 2GB de memória e não faz diferença.
Usar objetos
Enviado: 20 Jul 2023 17:45
por JoséQuintas
Sei lá, não estou entendendo nada.
Usar objetos
Enviado: 20 Jul 2023 17:52
por JoséQuintas
2GB ocupando 100MB ?
Tô ficando doido?
Usar objetos
Enviado: 20 Jul 2023 17:59
por JoséQuintas
10.000 elementos de 100MB, 1.000 GB, em 100MB de memória?
O que estou fazendo de errado?
1 trilhão de bytes.
Usar objetos
Enviado: 20 Jul 2023 18:13
por JoséQuintas
São 10.000 elementos, salvei um, tá lá no disco com 100MB
10.000 x 100.000.000 = 1 trilhão, é o que mostra lá testando o Len()
Os 10.000 não cabem nem no HD
O limite de memória 32 bits não comportaria isso.
Tô enxergando direito?
Será que o computador tá possuído?
Usar objetos
Enviado: 21 Jul 2023 13:32
por JoséQuintas
Alguém pode confirmar esses cálculos?
Como o Harbour pode armazenar 1 TERABYTE de informação em 100 MB de memória ?
Pra mim, se meus cálculos estiverem corretos, algo muito estranho nisso, ainda mais se considerar 32 bits do harbour, que limita uso de memória.
Me veio na cabeça aqueles problemas aleatórios que eu e outras pessoas já comentamos por aqui.
Será que o harbour está misturando tudo quando estoura a memória ?
Por isso tentando entender, e torcendo para meus cálculos estarem errados, ou que exista algum motivo pra isso.
Usar objetos
Enviado: 21 Jul 2023 15:40
por JoséQuintas
Sei lá.... tanto faz o teste....
Código: Selecionar todos
x := Array(1000000)
AFill( x, Space(100000000) )
FOR EACH i IN x
t += Len( i )
NEXT
? Transform( t, "999,999,999,999,999" )
hb_MemoWrit( "um.x",x[1] )
1 milhão de elementos de 100MB
100 terabytes, e continua funcionando, e ocupando só 100mb de memória.
Se for assim, salvar toda coleção de filmes em memória e fazer backup da memória.
Usar objetos
Enviado: 21 Jul 2023 15:48
por JoséQuintas
Código: Selecionar todos
CLS
DO WHILE nKey != K_ENTER
x += x
? Transform( Len( x ), "9,999,999,999,999,999" )
nKey := Inkey(1)
ENDDO
Desse jeito dá erro, por volta de 400mb, não sei dizer direito, porque a janela se fecha.
d:\temp>type hb_out.log
Application Internal Error - d:\temp\test.exe
Terminated at: 2023-07-21 16:00:52
Unrecoverable error 9009: hb_xrealloc can't reallocate memory
Called from MAIN(21) in test.prg
Mas como array não dá erro nunca.
Quem sabe não encontrei o problema.....
Usar objetos
Enviado: 22 Jul 2023 06:03
por marcosgambeta
José,
Atente pare este detalhe: você está fazendo testes com strings VAZIAS.
Experimente colocar conteúdo nas strings e observe os resultados.
Inicie com valores menores e vá aumentando, observando o consumo de memória.