Avatar billede omen Nybegynder
22. december 2003 - 15:45 Der er 9 kommentarer og
2 løsninger

Embedded fil til memory

Jeg har nogle embedded billedefiler i min dll fil, som regelmæsigt bliver sat ind i nogle pictureBoxes. Hver gang skal disse læses fra dll filen, altså harddisken.
Er der en måde at få disse billeder ind i hukommelsen fra programmets start, så disse bliver læst fra ram'en?
Avatar billede mufoxe Nybegynder
22. december 2003 - 16:14 #1
En god idé vil være at gemme dine ressourcer, som bruges ofte i en static variabel. På den måde deles den af alle instanser af et objekt. Det er fremragende ting til at spare på pladsen, især når der er tale om data, som ikke ændrer sig. Du kan lade den loade on the fly ved at kontrollere om din variabel er null, hvis den er, loader du hvis den ikke er, viser du bare direkte fra variablen.
Avatar billede omen Nybegynder
22. december 2003 - 17:13 #2
Det er sort snak for mig det der :)
Avatar billede arne_v Ekspert
22. december 2003 - 17:34 #3
Du har idag noget a la:

ResourceManager rm = new ResourceManager(...);
...
PictureBox pb1 = new PictureBox();
pb1.Image = (Image)rm.getObject("StandardPicture");
...
PictureBox pb2 = new PictureBox();
pb2.Image = (Image)rm.getObject("StandardPicture");
...
PictureBox pb3 = new PictureBox();
pb3.Image = (Image)rm.getObject("StandardPicture");

Det erstatter du bare med:

ResourceManager rm = new ResourceManager(...);
Image stdpic = (Image)rm.getObject("StandardPicture");
...
PictureBox pb1 = new PictureBox();
pb1.Image = stdpic;
...
PictureBox pb2 = new PictureBox();
pb2.Image = stdpic;
...
PictureBox pb3 = new PictureBox();
pb3.Image = stdpic;

Hvis du kommer med noget mere konkret kode, så kan jeg også komme med en mere
konkret løsning.
Avatar billede omen Nybegynder
22. december 2003 - 20:14 #4
Det er simpelt nok!

(global varible)
Bitmap newPic = new Bitmap(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("UserControl1.newPic.bmp"));

... dem kommer der så 10 mere af, og bruger dem f.eks på mouseEnter:
pictureBox1.Image = newPic;

Og vil gerne have de bitmaps læst ind i hukommelsen så snart programmet starter!
Avatar billede arne_v Ekspert
22. december 2003 - 20:20 #5
Er det ikke bare at læse dem ind først i Main ?

Eller i constructoren på en af de første klasser der loades ?

Eller gøre den static og loade den i en static contructor ?
Avatar billede arne_v Ekspert
22. december 2003 - 20:25 #6
En static constructor i klassen der indeholder Main må være
meget tidligt !
Avatar billede omen Nybegynder
22. december 2003 - 20:52 #7
Jo måske, men hvad vil du foreslå jeg gør?
Avatar billede arne_v Ekspert
22. december 2003 - 21:08 #8
Hvis din applikation er "typisk", så bliver main form kald straks
af Main, så jeg ville nok ligge den der.

Hvis du vil ligge den tidligst muligt så static og static constructor
i main class.
Avatar billede omen Nybegynder
22. december 2003 - 22:09 #9
Altså bliver de allerede læst ind i memory, når jeg gør det på den måde som jeg allerede gør?
Avatar billede arne_v Ekspert
22. december 2003 - 22:17 #10
Bitmap newPic = new Bitmap(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("UserControl1.newPic.bmp"));

bør læse ind i memory.

Ellers har jeg totalt misforstået noget !
Avatar billede omen Nybegynder
08. januar 2004 - 17:01 #11
Undskyld forsinkelsen, her er jeres point!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB