Toon posts:

[VB] +/- 8 arrays van 640 velden laden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben onlangs begonen met het schrijven van een programma waarin ik heel grote arrays nodig heb. De arrays worden niet gegeneerd door het programma zelf, maar worden in een module gezet.

uitzicht van module :
code:
1
2
3
4
5
6
7
8
9
10
11
12
Function BgArray()
dim BG(40,16)
BG(0, 0) = 0
BG(0, 1) = 15
BG(0, 2) = 63
BG(0, 3) = 63
BG(0, 4) = 63
BG(0, 5) = 63
BG(0, 6) = 63
BG(0, 7) = 63
....
end function

Zo zullen er na uitbreinding van het prog ongeveer 16 functies zijn met elk meer dan 300 velden. Deze functies worden dan bij het starten van het prog opgeroepen en dan kan ik gewoon werken met het programma.

Het laden van die waarden in de arrays is geen probleem dat gaat echt wel snel, maar het compilen van het programma duurt ergens 10 minuten als er 4 van die arrays in verwerkt zitten.

ik zoek dus een oplossing om die arrays te kunnen compilen enkel de eerst keer als ik de boel dus in elkaar zet en daarna niet meer.
Een res-file misschien ? Ken de werking niet van die dingen, maar je weet nooit.
of een kan het met een DLL ? alles erin zetten, compilen en dan uit het hoofdprog functies aanroepen ? (begrijp niet hoe de arrays in mijn prog zouden komen, maar je weet nooit).

iemand enig idee ?

Verwijderd

schrijf die meuk gewoon in een filetje en lees die in?

Verwijderd

Topicstarter
dat gaat de boel veel vertragen ...

ben beetje op zoek naar de snelste oplossing
en de bedoeling van die arrays is ook dat de gebruikers er niet kunnen aan prutsen, dus een gewoon filetje is niet mogelijk

Verwijderd

Kan je een sampletje ergens online zetten met 1 array ofzo, beetje optimizen altijd leuk >:)

Verwijderd

Topicstarter
zie echt niet in wat je ermee kan aanvangen, maar goed

voorbeeld array

  • ParaNoiMia
  • Registratie: Mei 2000
  • Laatst online: 05-09 11:47
Op woensdag 03 april 2002 16:34 schreef Mr.ChronoM het volgende:
en de bedoeling van die arrays is ook dat de gebruikers er niet kunnen aan prutsen, dus een gewoon filetje is niet mogelijk
De gegevens versleuteld wegschrijven met een controlegetal of -code erachter is toch wel mogelijk ?

Verwijderd

Topicstarter
Op woensdag 03 april 2002 16:43 schreef ParaNoiMia het volgende:

[..]

De gegevens versleuteld wegschrijven met een controlegetal of -code erachter is toch wel mogelijk ?
en dat zou het NOG trager maken ...

  • ParaNoiMia
  • Registratie: Mei 2000
  • Laatst online: 05-09 11:47
Op woensdag 03 april 2002 16:45 schreef Mr.ChronoM het volgende:

[..]

en dat zou het NOG trager maken ...
Om jezelf maar te quoten :
Het laden van die waarden in de arrays is geen probleem dat gaat echt wel snel
Bij initialisatie van je programma die gegevens lezen uit een tekstfile gaat best snel. VB scheurt zo door die tekstfile heen en het is alleen bij opstart van het programma, geloof nooit dat ie er 10 minuten over doet dan :)

Over wat voor gegevens praten we eigenlijk in dit programma ? Wellicht kunnen we een andere oplossing voor je verzinnen }:O

Verwijderd

Je kan er ook gewoon een DLL voor maken.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Nou ken ik Visual Basic verder niet, maar in elke fatsoenlijke programmeertaal die ik ken wordt per sourcefile een object file gegenereert, die pas opnieuw gegenereert hoeft te worden wanneer de sourcefile ook aangepast is. Zet dus je ingewikkelde functies in een aparte file, zodat ze niet opnieuw gecompileerd worden als je een wijzing maakt in de 'echte' code.

Als dit niet mogelijk is in Visual Basic, moet je misschien toch aan overstappen op een professionele programmeertaal gaan denken.

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Private Sub load_stuff()
Dim dta(39) As String
Dim i As Integer
Dim j As Integer
dta(0) = "((+/7GGgggggggfdd````````````````````````````````````````````````````````````````````````````````````````````````````````ddFG7/)"
dta(1) = "7ggggggggggggH(()))))))))))))))((((((((()))))))))))))))(((((((/088888888888888888888888888888888888888888888888888888880/(((Hggg"
dta(2) = "gggaaadddgggg(Gggdcc`ccgg`eeeeegG(((((Ggg`eeeeegg`eeeeegG(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(3) = "gggT,,99agggg(ggg[==;==ggPeUUUUgg(((((gggQbSSSSggORRNRRgg(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(4) = "gOgLLLLLLgggg(ggg-WUUUUggVVVVVJgg(((((ggg0SQSSPgg6]]-]^gg(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(5) = "ggg/Z[ZZ[gggg(gggLF6^^6gg7gGgg7gg(((((ggggggggggg?^][]>gg(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(6) = "ggg.Z*::*gggg(`efFfffffffffffffe`(((((`efffffffffffffffe`(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(7) = "ggg(AAAAAgggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(8) = "ggg4LLLLLddgg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(9) = "ggg/[[[[/gggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(10) = "ggggggggggggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(11) = "(Xdfggggggggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(12) = "(((((HHXXgggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(13) = "(((((((((gggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(14) = "(((((((((gggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(15) = "(((((((((gggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(16) = "(((((((((gggg(g(((((((((((((((((g(((((H80000000000000008H(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(17) = "(((((((((gggg(g(((((((((((((((((g(((((((((((((((((((((((((((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(18) = "(((((((((gggg(g(((((((((((((((((g(((((((((((((((((((((((((((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(19) = "(((((((((gggg(g(((((((((((((((((g(((((7GgggggggggggggggG7(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(20) = "(((((((((gggg(g(((((((((((((((((g(((((ggggEE<5<gggEE<5=gg(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(21) = "(((((((((gggg(g(((((((((((((((((g(((((gggggg[=[__ggYeC9gg(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(22) = "(((((((((gggg(g(((((((((((((((((g(((((gggggWGWGgggggggggg(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(23) = "(((((((((gggg(g(((((((((((((((((g(((((`efffffffffffffffe`(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(24) = "(((((((((gggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(25) = "(((((((((gggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(26) = "(((((((((gggg(g(((((((((((((((((g(((((g(((((((((((((((((g(((((g(((((((((((((((((((((((((((((((((((((((((((((((((((((((((g((((ggg"
dta(27) = "(((((((((gggg(H80000000000000008H(((((H81111111111111119I))))))I9999999999999999999999999999999999999998888888889999999H(((((ggg"
dta(28) = "(((((((((gggg(((((((((((((((((((((((((GH(((((()///(((((((((((((((((((((((((((((((((((((((((((((((((((((HG(((((GH(((((((HG((((ggg"
dta(29) = "(((((((((gggg(/7GDEEDEEGGFEDGGD7/(((((g(46++7Ggggg/+++++++++//77GGGGGGGGG77//+((((((((((((((((((((((((((g(((((g(((((((((g((((ggg"
dta(30) = "(((((((((gggg(gggY?;_?9gg=]Y==]gg(((((g(((Hdffggggggggggggggggggggggggggggggggg7+)((((((((((((((((((((((g(((((g(((((((((g((((ggg"
dta(31) = "(((((((((gggg(ggg4=4EEDggBBBBBNgg(((((g(((((((((HHXXHHHHHXXXXXggggggggggggggggggggggG+))))(((((((())((((g(((((g(((((((((g((((ggg"
dta(32) = "(((((((((gggg(gggA^^X^>gg0cAcccgg(((((g(((((((((((((((((((((((dggggggggggggggggggggggggggg`XXXX```````((g(((((g(((((((((g((((ggg"
dta(33) = "(((((((((gggg(gggK_____ggVVVVVJgg(((((g((((((((((((((((((((((((gggggggggggggggggggggggfdd<((((((((((((((g(((((g(((((((((g((((ggg"
dta(34) = "(((((((((gggg(`efffffffff6fFff6e`(((((g((((((((((((((((((((((((dggggggggggggggggggggdH((((((((((((((((((g(((((g(((((((((g((((ggg"
dta(35) = "(((((((((gggg(g(((((((((((((((((g(((((g(((((((((((((((((((((((+Ggggggggggggggggggg7++/+++))))))++//77`X(g(((((g(((((((((g((((ggg"
dta(36) = "(((((((((gggg(H80000000000000008H(((((g(((((((((((((((((((((/gggggggggggggggggggggggggggffffdd``XXHH((((g(((((g(((((((((g((((ggg"
dta(37) = "(((((((((gggg(((((((((((((((((((((((((g((((((((((((((((((((((``````dd`fggggggfd`XXXXHH(H((((((((((((((((g(((((g(((((((((g((((ggg"
dta(38) = "(((((((((gggg)((((((((((((((((((((((((`,***************************************************************,`(((((`,*******,d((()ggg"
dta(39) = "(((((((((H`dffG77////////////////////////////////////////////////////////////////////////////////////////////////////////77Ffd`H"
For i = 0 To 39
For j = 0 To 127
   bg(j, i) = Asc(Mid$(dta(i), j + 1, 1)) - 40
Next
End Sub

sorry voor de layout verneuking..

Verwijderd

waarom hang je er niet gewoon een access databaseje achter...dat gaat volgens mij een stuk sneller :)

Verwijderd

Topicstarter
ok, echt niemand die iets af weet over het gebruik van *.res files of als ik die boel in een Dll kan stoppen, want ik ga GEEN txt of MBM gebruiken

wat ik zei over het laden en de snelheid :
Ik laad de gegevens UIT de arrays en das echt snel
het inladen dan die gegevens uit een txt niet

nog ff een rechtzetting, per array komen er 5120 velden ipv die 640 in de topic titel, was ff verkeerd uitgerekent

Verwijderd

Op woensdag 03 april 2002 17:13 schreef Mr.ChronoM het volgende:
wat ik zei over het laden en de snelheid :
Ik laad de gegevens UIT de arrays en das echt snel
het inladen dan die gegevens uit een txt niet
Euh maar dat hoef je toch ook maar 1x te doen tijdens initalisatie?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 10-09 14:16

Crazy D

I think we should take a look.

Op woensdag 03 april 2002 17:13 schreef Mr.ChronoM het volgende:
ok, echt niemand die iets af weet over het gebruik van *.res files of als ik die boel in een Dll kan stoppen, want ik ga GEEN txt of MBM gebruiken
Ik ben na het lezen van het topic een beetje verwart wat het probleem nou is, maar het is dus compilen wat zo takketraag gaat.
Dan zou een dll kunnen help ja. Functies bouwen die de arrays vullen, compilen (nachtje slapen :P), en geen omkijken meer naar (alleen niet vergeten de dll in je setup mee te nemen :P).

Resource file is denk ik geen optie. Daar kun je niet in 1 keer een soort van gecompilde functie instoppen, en je kan er ook geen array in bewaren. Dan krijg je dus een vette rij resources, en i.v.
arr(1) = 1
arr(2) = 3
etc
krijg je dan een loopje waarin je waarde voor waarde uit de resourcefile leest (of iets creatiever door meerde waardes in 1 uh veld (hoe noem je dat eigenlijk, 1 waarde in een stringlist in je resourcefile...), en ik denk dat dat het compilen wel sneller maakt, maar de executie tijd niet (nee niet gebenchmarkt).

Al vind ik Yarvieh z'n oplossing leuk. Ik zat alleen eerst te kijken wat voor ascii art je had neergeplant ;)

Exact expert nodig?


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 08-09 17:54

Sponge

Serious Game Developer

Als je een genecrypt text bestandje hebt, en die moet dat laden, kan dat MAKKELIJK in < 500ms.. check PSC voor RC4, of Ghost,DES ofzo.. er zijn een aantal razendsnelle classes.

Sla de data 1x op als binary op en je kunt simpel
code:
1
2
3
4
5
6
7
Dim lngFreeFile as Long
lngFreeFIle = freefile
Open strFile for Binary As #lngfreefile
Get #lngfreefile,,BG
Decrypt de byteArray
Close #lngFreefile
done :)

Is alles om je array vol te krijgen... rename het bestandje naar .dat ofzo, en dan heb je geen problemen meer

Verwijderd

Puur compileren: dan dll maken, testen, compilen en daarna nooit meer.

Verwijderd

Overigens, het compilen gaat iets minder 'takketraag' als je bij je project properties: Compile, Advanced Optimizations, Remove Array Bounds Checks aanzet.
Maar zoals bovenin dat scherm te lezen valt:
enabling the following optimizations may prevent correct execution of your program...

Maar persoonlijk zou ik alle codes in een (binaire) file zetten en die in je .res-file plakken. Bij het opstarten alles omzetten naar je array... en klaar is kees ;)

Verwijderd

Topicstarter
aangezien ik nog nooit met res-files gewerkt heb zal ik maar ff op zoek gaan hoe ik dat voor elkaar krijg.

weet nu tenminste dat het mogelijk is. anders neem ik wel een dll

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 08-09 17:54

Sponge

Serious Game Developer

Een resourcefile is ook niet alles.. dat kan ik ook zomaar veranderen met een simpele Resource-extractor, aangezien het direct in de exe compiled wordt, wordt je exe ook nog eens xx keer zo groot... het beste blijft de code hierboven die alles razendsnel in de array zet, elke fatsoenlijke tile-engine voor spellen doet het o pdeze manier... en daar zitten meestal nog meer items in de array dan je nu hebt =-)

Je kunt trouwens om te testen ook compilen naar P-code..is trager, maar compiled heel veel sneller, als je klaar bent maak je gewoon de laatste compile Native, en alles is weer cool :)

Verwijderd

edit , reply... 't zit ook veel te dicht bij elkaar allemaal :(

Verwijderd

Op donderdag 04 april 2002 10:33 schreef Mr.ChronoM het volgende:
aangezien ik nog nooit met res-files gewerkt heb zal ik maar ff op zoek gaan hoe ik dat voor elkaar krijg.
Zoals ik dat altijd doe met binaire bestanden:
Maak een .rc bestand met daarin je bestand(en)
code:
1
1001 DATA "data.dat"

Als je nu met RC (staat ergens in je VisualBasic directory) deze file 'compileert', dan krijg je een .RES-file die je in je project kan stoppen.

Om de gegevens weer uit je resource te halen gebruik je de functie LoadResData (met ID=1001 en Type="DATA") en kan je de data in een byte-array stoppen. Nu weet ik niet of je dit direct in je multi-dimensionale array kan stoppen (zou handig zijn), maar anders moet je een tijdelijke 1-dimensionale array maken (Dim aBytes(4096) As Byte) en die omzetten...
code:
1
2
3
4
  (getallen kloppen niet met jouw voorbeeld, maar gaat om het idee...)
  For l = 0 To 4096
    BG( l mod 256, l \ 256 ) = aBytes( l )
  Next l

Zou snel genoeg moeten gaan, zeker in gecompileerde vorm.

Waarschuwing: alles heb ik net uit me hoofd ingetikt, het zou kunnen zijn dat niets werkt >:)
Pagina: 1