Toon posts:

[VB]RAM optimaliseren

Pagina: 1
Acties:
  • 122 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Kun je met VB via API's RAM optimaliseren? Dus net zoiets doen als RAMIdle of MemBoost?

  • Skinkie
  • Registratie: Juni 2001
  • Laatst online: 09-06-2020

Skinkie

Op naar de 500

waarom wil je dat in vredesnaam in VB doen?

dat is net zoiets als: Kun je met een lada, F1 racen?

het kan uiteraard...

Steun Elkaar, Kopieer Nederlands Waar!


Verwijderd

Topicstarter
In welke taal zou ik het dan beter kunnen doen? C, C++? En als het kan in VB, hoe dan(ongeveer).

Verwijderd

Op zaterdag 15 juni 2002 11:21 schreef Skinkie het volgende:
waarom wil je dat in vredesnaam in VB doen?

dat is net zoiets als: Kun je met een lada, F1 racen?

het kan uiteraard...
Wellicht kan je dan ook aangeven welke API's hij moet gebruiken en niet meteen z'n taal afkraken...

Verwijderd

Topicstarter
Ik weet ook wel dat het in VB gewoon niet snel gaat enzo, maar ik kan nou eenmaal geen C/C++. Wil ik wel gaan leren trouwens, maar wou dit toch in VB kunnen.

Verwijderd

Ik zou zeggen zoek eerst es uit hoe dat technish werkt en ga je daarna pas druk maken of het in vb kan.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Zoek eerst eens uit of je het wel wil en kan maken.
Er zijn al tools die het kunnen, dus waarom zelf maken :?

Verwijderd

Topicstarter
Op zaterdag 15 juni 2002 12:15 schreef ACM het volgende:
Zoek eerst eens uit of je het wel wil en kan maken.
Er zijn al tools die het kunnen, dus waarom zelf maken :?
Dan zou je net zo goed niet kunnen leren coden.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:59
Op zaterdag 15 juni 2002 17:31 schreef CArNi4 het volgende:
Dan zou je net zo goed niet kunnen leren coden.
Betekent dat, dat alles wat ooit gemaakt zou kunnen worden, al bestaat?

Verwijderd

Maargoed wat moet zo'n applicatie doen dan volgens jouw? heb je zowiezo kennis van de achterliggende theorie zoals de memory manager, working sets virtual memory etc... :?

Verwijderd

Op zaterdag 15 juni 2002 17:41 schreef Soultaker het volgende:
Betekent dat, dat alles wat ooit gemaakt zou kunnen worden, al bestaat?
Ik denk dat Carni4 bedoelt dat we niets opnieuw mogen maken, dat we dan 1 OperatingSystem, 1 Tekstverwerker, 1 SpreadSheet, etc zouden hebben gehad...
Op zaterdag 15 juni 2002 17:50 schreef Yarvieh het volgende:
Maargoed wat moet zo'n applicatie doen dan volgens jouw? heb je zowiezo kennis van de achterliggende theorie zoals de memory manager, working sets virtual memory etc... :?
Als ik kijk naar WinRAM-Booster 2001 (die ik geinstalled heb), dan gooit die al het geheugen vol (zie je mbv TaskManager). Blijkbaar verplaatst Windows daardoor alle andere programma's naar het virtuele geheugen/swap-file, waardoor er meer conventioneel geheugen overblijft.
Als andere programma's ook op deze manier werken, dan zou VB (die toch al niet zuinig is met het geheugen) uitermate geschikt zijn om dit op te lossen :+

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zaterdag 15 juni 2002 17:31 schreef CArNi4 het volgende:
Dan zou je net zo goed niet kunnen leren coden.
Als jij het wil coden om het te leren, dan heb je iig een goede reden dit te coden.

Als jij wilt coden om te leren programmeren, dan is dit absoluut niet iets waarmee je moet beginnen :)

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 02-09 17:49

mOrPhie

❤️❤️❤️❤️🤍

Her kun je wel wat dingen vinden.

http://216.26.161.91/vbapi/ref/c/copymemory.html

Hoewel je wel uit moet kijken met deze API in VB. Kan er effectief zijn (voor handige snelle string-add's bijvoorbeeld), maar kan ook je programma flink laten crashen.

Welcome to the wonderfull world of VB :P

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


Verwijderd

Ehh 't kan aan mij liggen, maar als je iets kopieerd dan had je het 1x, en heb je het daarna 2x, hoe past dit ook al weer in "optimalisatie" waar de topic starter opzoek naar is?

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 02-09 17:49

mOrPhie

❤️❤️❤️❤️🤍

Op zondag 16 juni 2002 02:19 schreef Yarvieh het volgende:
Ehh 't kan aan mij liggen, maar als je iets kopieerd dan had je het 1x, en heb je het daarna 2x, hoe past dit ook al weer in "optimalisatie" waar de topic starter opzoek naar is?
Ik breng de topicstarter een richting op. Ik kan hem niet de oplossing op een presenteerblaadje geven, maar middels deze link vertel ik em wel waar hij een beetje kan zoeken. Er staan binnen die page nog wat verwijzingen. Het is dus nuttig.

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


Verwijderd

Als de beschrijving van Debbus +- klopt kan je (mits in bezit van 'n NT systeem) volgens mij net zo goed alle processen in je systeem enumereren, en daar de workingset van legen. Zo'n appje moet wel te maken zijn in VB aangezien daar maar een paar niet al te spannende api calls voor nodig zijn. Of het het zelfde resultaat heeft als RamIdle en Memboost geen idee maar 't is zowie zo een leuk oefening toch?

Verwijderd

Topicstarter
Op zaterdag 15 juni 2002 18:54 schreef Debbus het volgende:
[..]
Ik denk dat Carni4 bedoelt dat we niets opnieuw mogen maken, dat we dan 1 OperatingSystem, 1 Tekstverwerker, 1 SpreadSheet, etc zouden hebben gehad...
[..]
Ok, dat was inderdaad een beetje een overdreven uitspraak van mij, maar de meeste programma's bestaan al wel, dus daarom...
Op zaterdag 15 juni 2002 19:09 schreef ACM het volgende:

[..]

Als jij het wil coden om het te leren, dan heb je iig een goede reden dit te coden.

Als jij wilt coden om te leren programmeren, dan is dit absoluut niet iets waarmee je moet beginnen :)
Ik kan al wel coden in VB, is ook niet zo moeilijk ofzo, dus ik ga voor de eerste:
Als jij het wil coden om het te leren, dan heb je iig een goede reden dit te coden.

Ik heb de maker van MemBoost gemaild, hij heeft MemBoost in Delphi 5 geschreven en code vroeger ook in VB, hij dacht dat het ongeveer zo moest in vb:
code:
1
2
3
4
5
6
dim somestring as string

private sub Freeram()
somestring = space (1024000) '1MB to allocate
somestring = " " 'make it just a space
end sub

Zou dat nou echt goed werken?

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 02-09 12:24

Apache

amateur software devver

euhmmm, en wat ben je dan met die code van plan?

alle geheugen van een pc te alloceren en het dan vullen met spatie's ofzo? :+

K'denk dat je toch eerst maar eens moet gaan kijken hoe het hudige geheugen management werkt, en hoe je daaraan dingen zou kunnen aanpassen, dus ook zien hoe je het kan aanspreken en of het kan uit vb.

If it ain't broken it doesn't have enough features


Verwijderd

Op zondag 16 juni 2002 13:51 schreef CArNi4 het volgende:
code:
1
2
3
4
5
6
dim somestring as string

private sub Freeram()
somestring = space (1024000) '1MB to allocate
somestring = " " 'make it just a space
end sub

Zou dat nou echt goed werken?
Strings in VB zijn altijd unicode dus je alloceerd zowiezo 2mb daar..

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-08 17:06

Sponge

Serious Game Developer

Op zondag 16 juni 2002 14:46 schreef Yarvieh het volgende:

[..]

Strings in VB zijn altijd unicode dus je alloceerd zowiezo 2mb daar..
En sowieso zal Space$() sneller zijn

Verwijderd

je plakt dus het hele geheugen eerst vol, zodat windows zelf geheugen voor al die spaties gaat vrij maken? en vervolgens is je hele geheugen dus vol met leegte?

Verwijderd

Je plakt niet je fysieke geheugen vol, je prakt je virtual geheugen vol, in de hoop dat de VMM pagina's die al 'n tijdje niet aangesproken zijn uit geheugen paged en naar je pagefile schrijft zodat ie daar je pagina's met spaties neer kan zetten.

Verwijderd

ik zou eens kijken naar SetProcessWorkingSetSize() en GetProcessWorkingSetSize()

Verwijderd

Op zondag 16 juni 2002 14:54 schreef Yarvieh het volgende:
Je plakt niet je fysieke geheugen vol, je prakt je virtual geheugen vol, in de hoop dat de VMM pagina's die al 'n tijdje niet aangesproken zijn uit geheugen paged en naar je pagefile schrijft zodat ie daar je pagina's met spaties neer kan zetten.
Ja oke, dat snap ik. Maar wat moet je dan met al die spaties? Ga je die later nog unloaden ofzo, of hoe maak je die ruimte weer vrij? Of is dat niet nodig? (Ik ben n00b met geheugen en hoe windows dat aanpakt, programeertechnisch gezien) maar het lijkt me wel leuk om te weten.

Verwijderd

Ik vond gewoon botweg EmptyWorkingSet aanroepen wel 'n redelijke actie, pages die ie weer nodig heeft paged is toch vanzelf weer terug. dit was m'n C test sourceje van gister avond.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <Psapi.h>

int main(int argc, char* argv[])
{
    DWORD pids[4096];
    DWORD Needed=0;

    EnumProcesses(pids,4096,&Needed);
    
    for (DWORD i=0; i<Needed/sizeof(DWORD); i++ )
    {
        HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pids[i]);
        EmptyWorkingSet(h);
        CloseHandle(h);
    }
    return 0;
}

Zoals ik al eerder zei, 4 niet al te spannende apicalls, moet best lukken in VB lijkt me.

Verwijderd

Op zondag 16 juni 2002 15:13 schreef K-Mile het volgende:

[..]

Ja oke, dat snap ik. Maar wat moet je dan met al die spaties? Ga je die later nog unloaden ofzo, of hoe maak je die ruimte weer vrij? Of is dat niet nodig?
Kijk es 1 regel lager? daar kent ie aan die zelfde string weer 1 spatie toe, waardoor dus de data die er in stond door onze vriend VB (die alles voor ons regeld) vanzelf het geheugen weer vrij geeft.

Verwijderd

Aaah... ik snap hem..

ik ben niet zo thuis in VB, maar ik dacht dat ie een spatie van 1 Mb ofzo in het geheugen zette |:( :P of iig 1 mb ruimte reserveren voor die spatie, maar als je die spatie zet wordt dus die 1MB die vrij is gemaakt met alleen een spatie opgevuld, dus dan houd je 0.9999 MB over right?

hmz, wel lachuh, maar dan zit je alsnog met die spaties in je geheugen ;) :P

Verwijderd

Op zondag 16 juni 2002 15:14 schreef Yarvieh het volgende:
code:
1
2
DWORD pids[4096];
EnumProcesses(pids,4096,&Needed);
dat klopt niet 100%, bij EnumProcesses moet je 4096*sizeof(DWORD) meegeven ipv 4096, nml. de grootte van het array in bytes

Verwijderd

Het netst had gewoon sizeof(pids) geweest maarja 't was half 3 ofzo , dan benk op een of andere manier niet op m'n helderst :Y)

Verwijderd

vreemde vraag. . maare het antwoord is NEE. . . VB is van M$. ... tja. .en M$ en optimalisatie in 1 zin . .dat is vragen naar problemen

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:59
Op zondag 16 juni 2002 16:36 schreef Skizmo het volgende:
vreemde vraag. . maare het antwoord is NEE. . . VB is van M$. ... tja. .en M$ en optimalisatie in 1 zin . .dat is vragen naar problemen
"Zeg dan niets."

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-09 13:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op zondag 16 juni 2002 16:36 schreef Skizmo het volgende:
vreemde vraag. . maare het antwoord is NEE. . . VB is van M$. ... tja. .en M$ en optimalisatie in 1 zin . .dat is vragen naar problemen
Kom met normale argumenten, of zeg idd gewoon niets, maar ga niet lopen trollen :{
Afgezien van het feit dat je opmerking kant noch wal raakt lokt het alleen maar boze reacties uit van andere mensen, waardoor het hele draadje verpest kan worden :{

Ik zou dan ook de andere mensen willen verzoeken verder niet op de opmerking van Skizmo in te gaan

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-08 17:06

Sponge

Serious Game Developer

Op zondag 16 juni 2002 15:20 schreef K-Mile het volgende:
Aaah... ik snap hem..

ik ben niet zo thuis in VB, maar ik dacht dat ie een spatie van 1 Mb ofzo in het geheugen zette |:( :P of iig 1 mb ruimte reserveren voor die spatie, maar als je die spatie zet wordt dus die 1MB die vrij is gemaakt met alleen een spatie opgevuld, dus dan houd je 0.9999 MB over right?

hmz, wel lachuh, maar dan zit je alsnog met die spaties in je geheugen ;) :P
Nee, VB maakt een string van 2 mb, die string bestaat alleen maar uit spaties. Daarna verkleint hij de string weer tot 1 spatie

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:59
Op zondag 16 juni 2002 18:28 schreef 41.6C.6D.61.72 het volgende:
Nee, VB maakt een string van 2 mb, die string bestaat alleen maar uit spaties. Daarna verkleint hij de string weer tot 1 spatie
Wat een lelijke methode om het geheugen leeg te gooien zeg. Zelfs als het gegarandeerd werkt onder elke mogelijk implementatie van VB (al zijn dat er vrij weinig), codeer je in je programmeertaal iets heel anders dan je met die code wilt bereiken. Erg portable (tussen verschillende versies van VB en verschilende Windows operating systems) is je code dus niet.

Verder kwam ik Silberschatz (Operating System Concepts) de volgende tekst tegen over geheugenmanagement in Windows 2000: "If no page frames are available on the free list, Windows 2000 uses a per-process FIFO replacement policy to take pages from processes that are using more than their minimum working-set size. Windows 2000 monitors the page faulting of each process that is at minimum working-set size and adjusts the working-set size accordingly."

De voorgestelde strategie zal dus niet werken, zonder eerst de working-set size op 0 te zetten. Daarbij kan je programma nooit direct pages van andere processen stelen. Het zou me dus niets verbazen, dat door die 2 MB grote string aan te maken, een deel van de pages van je eigen proces worden weggeswapt. Aangezien je ze daarna niet meer nodig hebt (je refereert niet meer aan de string) worden ze nooit meer ingeswapt, heeft niemand een probleem en blijven dus alle processen in het geheugen. De kans is dus erg groot dat de voorgestelde strategie onder Windows 2000 helemaal niet werkt.

Ik snap sowieso niet wat het nut zou kunnen zijn, van het vrijmaken van fysiek geheugen. De hoeveelheid geheugen die processen nodig hebben (het virtuele geheugengebruik) verandert er niet door en het gevolg van pages wegswappen is alleen maar dat je processen er trager van worden. Je kunt er in principe vanuit gaan dat bij de ontwikkeling van Windows 2000 (en elk ander serieus operating system) goed is nagedacht over 't memory management en de kans dat je daar als user application iets aan kunt verbeteren, is nagenoeg nihil.

Eventuele verbeteringen zijn wel te behalven met het goed instellen van de parameters van de memory manager. Hierbij doe je dus zelf niets met geheugen. Je kunt dan ook gewoon de beschikbare API calls gebruiken.

Zoals in het begin al is gezegd, zul je, om ueberhaupt winst te kunnen boeken, wel enig benul moeten hebben van de memory manager waar je mee te maken hebt.

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-08 17:06

Sponge

Serious Game Developer

Op zondag 16 juni 2002 19:04 schreef iets interessants:

[..]
Dit is ook niet mijn idee :P. Ik denk dat je eerder met ProcessMemory API calls moet gaan klooien... sowieso heb ik altijd al twijfels over zulk soort programma's anyway.

Verwijderd

Even ter correctie.
Ik heb geschreven dat ik WinRAM Booster mijn geheugen vol zag gooien, waardoor ik dacht dat daardoor Windows programma's ging swappen (op zich niet zo'n gek idee :) ). Daarna werd een stukje code gepost waarin 1 of 2 MB geheugen werd gereserveerd... Dit zou in mijn geval dat dus 386 MB moeten zijn... (met een string van 2MB zit mijn geheugen namelijk nog niet vol).

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:59
Op zondag 16 juni 2002 21:51 schreef Debbus het volgende:
Even ter correctie.
Ik heb geschreven dat ik WinRAM Booster mijn geheugen vol zag gooien, waardoor ik dacht dat daardoor Windows programma's ging swappen (op zich niet zo'n gek idee :) ).
Zoals ik al vermeldde, zal je in eerste instantie de pagina's van je eigen proces wegswappen. Als je de geinitialiseerde string vervolgens niet meer gebruikt, zullen jou pagina's nooit ingeswapped worden (en blijven pagina's van andere processen gewoon in het fysieke geheugen). Waarom zou Windows immers je working set willen verhogen als je geen page faults genereert?

Verwijderd

moet je dan dus een 396 Mb tegelijk aan spaties in je geheugen proppen als je zoveel geheugen hebt?

want wat jij dus zegt is dat ie voor die 2 Mb steeds hetzelfde stukkie pakt.. ?

Verwijderd

Topicstarter
Op zondag 16 juni 2002 23:12 schreef K-Mile het volgende:
moet je dan dus een 396 Mb tegelijk aan spaties in je geheugen proppen als je zoveel geheugen hebt?

want wat jij dus zegt is dat ie voor die 2 Mb steeds hetzelfde stukkie pakt.. ?
Je ziet wel altijd als je StatBar aan hebt en je laat je RAM met één of ander prog optimizen, dat ie eerst helemaal naar 0 gaat, dus hij gaat gewoon door tot ie alles heeft, en dan verlaat ie de functie, zodat alles weer vrijkomt. Denk ik.
Pagina: 1