• Anmelden

Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

  • »Shabraxxx« ist der Autor dieses Themas

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Nachricht senden

1

Sonntag, 15. Februar 2015, 16:34

Zugesicherten Speicher des RGSS-Players auslesen

Hallo Gast,

der Titel verrät schon alles – gibt es eine Möglichkeit, mit verhältnismäßigem Aufwand den Speicher, den der RGSS-Player gerade verwendet (!), auszulesen?
Und gehe ich recht in der Annahme, dass der maximale Speicher, den der Player allozieren (?) kann, 2 GiB beträgt?
Gruß, Shabz

P.S.: Für den Fall, dass es jemanden interessieren sollte, was der Unfug soll, hier ein Hinweis.
„Albrecht Dürer, geboren 1471, gestorben 1530.
Der Nürnberger Maler, der ganz Europa faszinierte; mit seinem scharfen Auge, seiner Meisterschaft in Linienführung und Plastizität, sowie seiner Leihwagenfirma.“

2

Sonntag, 15. Februar 2015, 23:31

Du musst nur die GlobalMemoryStatusEx Funktion der WinAPI aufrufen und dann die Rückgabe auswerten.

Dann kriegst Du dann solche Infos raus (Beispiel):

Zitat


There is 65 percent of memory in use.
There are 4160656 total KB of physical memory.
There are 1433620 free KB of physical memory.
There are 8319456 total KB of paging file.
There are 4034132 free KB of paging file.
There are 2097024 total KB of virtual memory.
There are 1932844 free KB of virtual memory.

There are 0 free KB of extended memory.


Willst Du das selber machen? Brauchst Du Tipps? Du postest unter Talk und nicht unter Skriptanfrage?

Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

  • »Shabraxxx« ist der Autor dieses Themas

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Nachricht senden

3

Montag, 16. Februar 2015, 01:08

Hallo Playm,

tun wir doch so, als hätte ich es unter Scriptanfragen gepostet. ;)
Gruß, Shabz
„Albrecht Dürer, geboren 1471, gestorben 1530.
Der Nürnberger Maler, der ganz Europa faszinierte; mit seinem scharfen Auge, seiner Meisterschaft in Linienführung und Plastizität, sowie seiner Leihwagenfirma.“

4

Montag, 16. Februar 2015, 03:28

Nagut, probier das hier mal aus:
Spoiler

Ruby Quellcode

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#==============================================================================
# ** Ermögliche Funktionen, die nur Shab brauchen kann [A] - Skript
#------------------------------------------------------------------------------
#  Mit diesem Skript kann man auf WinXP und späteren Systeme Informationen
#  über den Memorystatus erhalten. Rufe die Informationen über
#    mem = Win32API.get_global_memory_status
#  ab, und erhalte dann über mem.memory_load zum Beispiel wieviel Prozent
#  des Speichers gerade in Benutzung sind.
#  
#  Auszug der verfügbaren Informationen:
#    .memory_load                 : 0..100 - angenährter Prozentsatz des
#                                   aktuell verwendeten physischen Speichers
#    .phys_total                  : Verwendeter physischer Speicher in Bytes
#    .phys_avaialble              : Freier physischer Speicher in Bytes
#    .virtual_total               : Die Größe des virtuellen Speicher des 
#                                   Prozesses. Dies hängt starkt von Betriebs-
#                                   system und verwendeter Hardware ab.
#                                   Laut Doku ist dies in etwa 2 GB für 32-bit
#                                   Prozesse auf einem x86.
#    .virtual_avaiable            : Aktuell freier virtueller Speicher in Bytes
#  
#  Für weitere Informationen über alle Attribute der Memory_Status Struktur
#  siehe die offizielle API Dokumentation unter:
#   msdn.microsoft.com/en-us/library/windows/desktop/aa366770%28v=vs.85%29.aspx
#  Und betrachte den Testcode am Skriptende.
#------------------------------------------------------------------------------
#  Autor: Playm
#  Datum: 2015-02
#  Maker: RPG Maker XP
#  Einfache Nutzung in nicht-kommerziellen  RMXP  Projekten ist gestattet.
#  Keine kommerzielle Nutzung gestattet. Für Lizenzen an den Autor wenden.
#  Keine Weiterverbreitung in originaler oder abgeänderter Form gestattet.
#==============================================================================
# ** Memory_Status
#==============================================================================
Memory_Status = Struct.new( :memory_load, :phys_total, :phys_avaialble,
                            :pagefile_total, :pagefile_available,
                            :virtual_total, :virtual_avaiable,
                            :extendent_virtual_available )
#==============================================================================
# ** Win32API
#==============================================================================
class Win32API
  #--------------------------------------------------------------------------
  # * Get Global Memory Status
  #   Liefert ein Memory_Status Objekt zurück, oder nil, wenn der Aufruf
  #   erfolglos war.
  #--------------------------------------------------------------------------
  def self.get_global_memory_status
    memory_status_ex = [ 64, 0, 0, 0, 0, 0, 0, 0, 0].pack('LLQQQQQQQ')
    api = Win32API.new('Kernel32', 'GlobalMemoryStatusEx', 'p', 'i')
    result      = api.call( memory_status_ex )
    memory_info = memory_status_ex.unpack( 'LLQQQQQQQ' )
    memory_info.shift
    return nil if result.zero?
    return Memory_Status.new( *memory_info )
  end
end
 
#----------------------------------------------------------------------------
#  Test Code (dieser Block kann gelöscht werden)
#----------------------------------------------------------------------------
mem = Win32API.get_global_memory_status
div = 1024 # Wir teilen durch 1024 um Bytes in Kilobytes umzurechnen
string  = ''
string += sprintf("There is  %d percent of memory in use.\n", mem.memory_load)
string += sprintf("There are %d total KB of physical memory.\n", mem.phys_total/div)
string += sprintf("There are %d free  KB of physical memory.\n", mem.phys_avaialble/div)
string += sprintf("There are %d total KB of paging file.\n", mem.pagefile_total/div )
string += sprintf("There are %d free  KB of paging file.\n", mem.pagefile_available/div)
string += sprintf("There are %d total KB of virtual memory.\n", mem.virtual_total/div)
string += sprintf("There are %d free  KB of virtual memory.\n", mem.virtual_avaiable/div)
string += sprintf("\nThere are %d free  KB of extended memory.", mem.extendent_virtual_available/div)
# Text ausgeben und beenden
print string
exit
#----------------------------------------------------------------------------
zum Lesen den Text mit der Maus markieren

Laut Dokumentation kommen für den virtuellen Speicher eines 32-bit Prozesses (wie unsere Game.exe) auf x86 die 2GB in etwa hin. Auf stärkerer Hardware oder wenn irgendwelche ominösen Betriebssystemoptionen gesetzt sind ist da aber auch noch mehr möglich, meint MSDN.

Viel Spaß beim damit rumspielen.

PS: Ich denke ich werde deine special purpose Skripte jetzt einfach mit Buchstaben durchindizieren statt mir sinnvolle Namen auszudenken, da Du eh der einzige bist, der sie nutzen wird. ;)

Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

  • »Shabraxxx« ist der Autor dieses Themas

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Nachricht senden

5

Montag, 16. Februar 2015, 11:03

Hallo Playm,

vielen Dank für die geschwinde Hilfe sowie einen – wie üblich – gar ausführlichen Header, den Du dir trotz der Shabz-Only-Exotik nicht nehmen lässt – Chapeau!
Gruß, Shabz

P.S.: "Ermögliche Funktionen, die nur Shab brauchen kann [A] - Skript" :heart:
„Albrecht Dürer, geboren 1471, gestorben 1530.
Der Nürnberger Maler, der ganz Europa faszinierte; mit seinem scharfen Auge, seiner Meisterschaft in Linienführung und Plastizität, sowie seiner Leihwagenfirma.“

Social Bookmarks