Grafika z dysku, czy z zasobów (optymalizacja)

0

Witam

Interesuje mnie kwestia optymalnego wykorzystania pamięci, a także odwołania do dysku przy wczytywaniu grafiki interfejsu do programu.

Mam dwie "metody" ładowania grafiki interfejsu i chciałbym, abyście podpowiedzieli, która jest lepsza w odniesieniu do pierwszego zdania.

**1. Ładowanie __dynamiczne __z biblioteki **
Zaznaczam, że dynamiczne, gdyż każde wywołanie wczytania elementu interfejsu, wczytuje bibliotekę do pamięci i następnie ją zwalnia.
Uważam, że ten sposób jest najlepszy, gdyż:

  • cała grafika interfejsu znajduje się w jednym pliku, a to zmniejsza rozproszenie (fragmentację) na dysku.

Z minusów tej metody to:

  • ładowanie całej biblioteki do pamięci
  • możliwe długie wczytywanie, gdyż najpierw ładowana jest DLLka, potem odczytywany konkretny zasób, a na końcu zwalniana DLLka, a to wywoływane jest wielokrotnie (np.: przy menu reagującym na położenie kursora myszki).

2. Ładowanie z dysku
Każde wywołanie wczytania elementu interfejsu, odwołuje się do konkretnego pliku na dysku. Więc wydaje mi się, że ta metoda jest szybsza i mniej pamięciożerna.
Jednak i tu widzę wady:

  • zbyt częste odwołanie do dysku może ograniczyć jego żywotność,
  • odczyt z dysku jest jednak o wiele wolniejszy niż z pamięci,

Nie wiem jak w innych programach, ale np.: w Kaspersky, czy AQQ, grafika ładowana jest prawdopodobnie przez metodę 2. W folderach tych programów, znajduje się podfolder z "setkami" plików (grafiką). Podejrzewam więc, że skoro ta metoda jest stosowana w takich aplikacjach, musi być najlepsza.

Co o tym sądzicie ?

0

IMHO, korzystają z tego drugiego sposobu, ponieważ jest prostszy.
Trzeba było dać ankietę :D

0
Opi napisał(a)

Witam

Interesuje mnie kwestia optymalnego wykorzystania pamięci, a także odwołania do dysku przy wczytywaniu grafiki interfejsu do programu.

Mam dwie "metody" ładowania grafiki interfejsu i chciałbym, abyście podpowiedzieli, która jest lepsza w odniesieniu do pierwszego zdania.

**1. Ładowanie __dynamiczne __z biblioteki **
Zaznaczam, że dynamiczne, gdyż każde wywołanie wczytania elementu interfejsu, wczytuje bibliotekę do pamięci i następnie ją zwalnia.
Uważam, że ten sposób jest najlepszy, gdyż:

  • cała grafika interfejsu znajduje się w jednym pliku, a to zmniejsza rozproszenie (fragmentację) na dysku.

Z minusów tej metody to:

  • ładowanie całej biblioteki do pamięci
  • możliwe długie wczytywanie, gdyż najpierw ładowana jest DLLka, potem odczytywany konkretny zasób, a na końcu zwalniana DLLka, a to wywoływane jest wielokrotnie (np.: przy menu reagującym na położenie kursora myszki).

2. Ładowanie z dysku
Każde wywołanie wczytania elementu interfejsu, odwołuje się do konkretnego pliku na dysku. Więc wydaje mi się, że ta metoda jest szybsza i mniej pamięciożerna.
Jednak i tu widzę wady:

  • zbyt częste odwołanie do dysku może ograniczyć jego żywotność,
  • odczyt z dysku jest jednak o wiele wolniejszy niż z pamięci,

Nie wiem jak w innych programach, ale np.: w Kaspersky, czy AQQ, grafika ładowana jest prawdopodobnie przez metodę 2. W folderach tych programów, znajduje się podfolder z "setkami" plików (grafiką). Podejrzewam więc, że skoro ta metoda jest stosowana w takich aplikacjach, musi być najlepsza.

Co o tym sądzicie ?

Tak czy tak najpierw odczytasz to z dysku. Temat jest o tyle zlozony o ile skomplikowana jest twoja aplikacja :) Jesli mowa o xxxxx MB obrazow w rozdzielczosci 4000x4000 24 bit itd. to wiadomo ze pamiec odpada... ale jesli chodzi o jakies proste ikony do GUI to biblioteka nie jest zlym rozwiazaniem. Robisz sobie managera zasobow graficznych i wczytujesz jednorazowo obraz i wykorzystujesz go tyle razy ile ci pasuje (a ladowany jest do pamieci przy pierwszym zapotrzebowaniu). Jesli grafiki moga troche zamulic pamiec musisz wtedy zwalniac nie uzywane grafiki i to wszystko. Wiec jestem za 1 i 2, bo te dwa punkty sa nie rozlaczne

0

Na bezsensownie sformułowane pytanie "bardziej optymalne" można jedynie zaznaczyć obie odpowiedzi. ;P

0

Widzę, że zdania są całkowicie podzielone w ankiecie, ale mało wylewni jesteście :)

0

Jeśli razi cię zwykły HDD, kup sobie SDD. SDD możesz wykorzystywać do obróbki danych - szybkie wczytywanie i zapis, a HDD np. do składowania przetrawionych danych, do których rzadko będziesz się odwoływać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1