Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
arvutisõber
HV veteran

liitunud: 01.08.2002
|
21.06.2008 16:08:14
Available physical memory väärtuse pärimine läbi cmd... |
|
|
Selle saab muidu kätte käsklusega systeminfo, aga probleem selles, et selle käsklus käivitab protsessid, mille töö kestab minu arvutis üle 2 sekundi.
Küsimus siis selline, et kas on ka mõni teine ja kiirem võimalus selle väärtuse pärimiseks?
Või on äkki Windowsil mingi logifail, mis sisaldaks ka seda konkreetset väärtust?
_________________ ... |
|
Kommentaarid: 55 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
53 |
|
tagasi üles |
|
 |
Dogbert
HV Guru

liitunud: 03.05.2004
|
21.06.2008 17:23:47
|
|
|
Võibolla on mingi parem variant olemas, aga üks võimalus on küsida vaba mälumahtu wmic (Windows Management Instrumentation Command-line) käest:
wmic memlogical get availablevirtualmemory
Esimesel käivitamisel võtab wmic käivitumine aega, sest seda paigaldatakse süsteemi, edaspidi töötab see kiiresti.
memphysical käsk on samuti olemas, aga ei väljasta kuidagi vaba mälu infot.
wmic memlogical get availablevirtualmemory /VALUE
väljundi kuju on veidi erinev - vaata ise, kumb paremini sobib.
_________________ Tee inimesele lõke ja tal on soe üheks päevaks, pista ta põlema ja tal on soe elu lõpuni. (Terry Pratchett)
e.k spikker: muhk on kumer, lohk on nõgus. |
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
32 |
|
tagasi üles |
|
 |
Andrus Luht
itimees.ee

liitunud: 11.06.2002
|
|
Kommentaarid: 377 loe/lisa |
Kasutajad arvavad: |
   |
:: |
5 :: |
1 :: |
318 |
|
tagasi üles |
|
 |
arvutisõber
HV veteran

liitunud: 01.08.2002
|
21.06.2008 18:12:50
|
|
|
BReaK da iCE kirjutas: |
Vistaga käib asi nii:
C:\Windows\system32>wmic MEMPHYSICAL LIST BRIEF
MaxCapacity MemoryDevices Model Name
4194304 2 Physical Memory Array |
 |
See peaks olema see väärtus, et palju on emaplaadi max mälu piir (replaceable memory)...
Natuke otsisin nende wmic commandide hulgast, aga paistab, et sealt seda available physical memory väärtust näha ei saa...
Kätte saab aga näiteks järgmised väärtused: AvailableVirtualMemory, TotalPageFileSpace, TotalPhysicalMemory, TotalVirtualMemory
wmic:root\cli>memlogical get /all
AvailableVirtualMemory Caption Description Name SettingID TotalPageFileSpace TotalPhysicalMemory TotalVirtualMemory
1807348 Logical Memory Configuration Logical Memory Configuration LogicalMemoryConfiguration LogicalMemoryConfiguration 2516544 1048048 3564592 |
Dogbert kirjutas: |
Võibolla on mingi parem variant olemas, aga üks võimalus on küsida vaba mälumahtu wmic (Windows Management Instrumentation Command-line) käest:
wmic memlogical get availablevirtualmemory
Esimesel käivitamisel võtab wmic käivitumine aega, sest seda paigaldatakse süsteemi, edaspidi töötab see kiiresti.
memphysical käsk on samuti olemas, aga ei väljasta kuidagi vaba mälu infot.
wmic memlogical get availablevirtualmemory /VALUE
väljundi kuju on veidi erinev - vaata ise, kumb paremini sobib. |
Ma siin mõtlen, et mis väärtuse see availablevirtualmemory üldse annab... Et see pole ka sama mis systeminfo -> "Virtual Memory: Available:" väärtus, samuti pole ta sama, mis systeminfo -> "Available Physical Memory". Äkki see available physical memory on lihtsalt osa sellest "memlogical get availablevirtualmemory", kui üldse on
Rääkides veel systeminfo-st, siis on võimalik anda selline käsklus nagu systeminfo | find "Available Physical Memory", et siis kuvatakse ainult soovitud rida tulemusest, aga aega läheb ikkagi üle 2 sekundi.
_________________ ... |
|
Kommentaarid: 55 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
53 |
|
tagasi üles |
|
 |
maxorator
HV kasutaja
liitunud: 30.08.2006
|
22.06.2008 11:01:15
|
|
|
Selleks on funktsioon GlobalMemoryStatus(), mis ütleb mitu protsenti mälust on kasutuses, palju on füüsilist mälu kokku/saadaval, palju on paging faile kokku/saadaval, palju on virtuaalset mälu kokku/saadaval. Kõike seda ilma mingite protsesside jooksutamiseta.
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
arvutisõber
HV veteran

liitunud: 01.08.2002
|
22.06.2008 22:44:58
|
|
|
maxorator kirjutas: |
Selleks on funktsioon GlobalMemoryStatus(), mis ütleb mitu protsenti mälust on kasutuses, palju on füüsilist mälu kokku/saadaval, palju on paging faile kokku/saadaval, palju on virtuaalset mälu kokku/saadaval. Kõike seda ilma mingite protsesside jooksutamiseta. |
Tänud!
Ainult probleem on selles, et ma saan sealt järgmised tulemused:
Total physical memory 7583270126696857600
Available physical memory 8387602464404013056 |
Ükskõik kuidas ma neid ei konverteeriks, on need kaks väärtust väga kahtlaselt suured numbrid (kui võtta ühikuks bitt, siis 8387602464404013056 -> 999880130815.984 MB)
_________________ ... |
|
Kommentaarid: 55 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
53 |
|
tagasi üles |
|
 |
JannoT
HV kasutaja

liitunud: 23.12.2005
|
22.06.2008 23:06:31
|
|
|
Proovi GlobalMemoryStatusEx()
_________________ 011010000110100101101110011011100110000101110110011000010110000101110100011011000111010101110011 |
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
 |
arvutisõber
HV veteran

liitunud: 01.08.2002
|
22.06.2008 23:17:37
|
|
|
JannoT kirjutas: |
Proovi GlobalMemoryStatusEx() |
Siis tuli tulemuseks:
Total physical memory 0
Available physical memory 0 |
_________________ ... |
|
Kommentaarid: 55 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
53 |
|
tagasi üles |
|
 |
JannoT
HV kasutaja

liitunud: 23.12.2005
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
 |
maxorator
HV kasutaja
liitunud: 30.08.2006
|
23.06.2008 12:35:12
|
|
|
Ei tea milles kirjutad, kuid midagi peaks see kood ütlema ikka.
#define WINVER 0x601
#include <windows.h>
void DisplayNum64(__int64 ullNum){
char szBuf[256];
MessageBox(0,_i64toa(ullNum,szBuf,10),"Number",MB_OK);
}
int main(int argc, char *argv[]) {
MEMORYSTATUSEX memStat={0};
memStat.dwLength=sizeof(MEMORYSTATUSEX); //seda peab kood kindlasti tegema, muidu funktsioon ei tööta
GlobalMemoryStatusEx(&memStat);
DisplayNum64(memStat.ullTotalPhys); //baitides
DisplayNum64(memStat.ullAvailPhys);
DisplayNum64(memStat.ullTotalPhys/1048576); //megades
DisplayNum64(memStat.ullAvailPhys/1048576);
return 1;
}
|
Ehk siis mul andis vastuseks:
Baitides:
2145824768 (Total physical)
1403252736 (Available physical)
Megades:
2046 (Total physical)
1338 (Available physical) |
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
arvutisõber
HV veteran

liitunud: 01.08.2002
|
23.06.2008 14:59:34
|
|
|
Ma realiseerisin Java JNA abil:
1. fail:
import com.sun.jna.*;
public class Nat
{
public static void main (String [] args)
{
Kernel32 lib = (Kernel32) Native.loadLibrary ("kernel32",
Kernel32.class);
Kernel32.MEMORYSTATUSEX mem = new Kernel32.MEMORYSTATUSEX ();
lib.GlobalMemoryStatus(mem);
System.out.println ("Available physical memory " + mem.dwAvailPhys);
System.out.println ("Total physical memory " + mem.dwTotalPhys);
} // End of main
} // End of file |
2. fail:
import com.sun.jna.*;
import com.sun.jna.win32.*;
public interface Kernel32 extends StdCallLibrary
{
public static class MEMORYSTATUSEX extends Structure
{
public long dwLength;
public long dwMemoryLoad;
public long dwTotalPhys;
public long dwAvailPhys;
public long dwTotalPageFile;
public long dwAvailPageFile;
public long dwTotalVirtual;
public long dwAvailVirtual;
} // end of MEMORYSTATUSEX
void GlobalMemoryStatus (MEMORYSTATUSEX result);
} // End of file
|
Tulemuseks ikkagi kahtlaselt suured numbrid:
Available physical memory 8387602464404013056
Total physical memory 7671723638128181248 |
Ja kui panen GlobalMemoryStatus asemele GlobalMemoryStatusEx, siis saan 0-d.
Seda errori pärimise asja pole veel jõudnud eriti vaadata...
_________________ ... |
|
Kommentaarid: 55 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
53 |
|
tagasi üles |
|
 |
i8080
Kreisi kasutaja

liitunud: 15.03.2002
|
23.06.2008 15:58:37
|
|
|
sul on seal justkui mess-up. kasutad vist 64bit väärtustega struktuuri(EX) ja 32bit funktsiooni (mitte-EX) korraga.
proovisin just ise su jna koodi ja kui asendasin MEMORYSTATUS struktuuri sees deklaratsioonid long (64bit) to int(32bit) ja funktsioonina kutsusin välja GlobalMemoryStatus(..), siis toimis kõik nii nagu peab.
üldse otsi msdn pealt mis vahe on MEMORYSTATUS ja MEMORYSTATUSEX struktuuridel (hint: ühel on enamus 64bit väärtused, teisel on kõik 32bit).
public static class MEMORYSTATUS extends Structure
{
public int dwLength;
public int dwMemoryLoad;
public int dwTotalPhys;
public int dwAvailPhys;
public int dwTotalPageFile;
public int dwAvailPageFile;
public int dwTotalVirtual;
public int dwAvailVirtual;
} // end of MEMORYSTATUS
public static class MEMORYSTATUSEX extends Structure
{
public int dwLength;
public int dwMemoryLoad;
public long ullTotalPhys;
public long ullAvailPhys;
public long ullTotalPageFile;
public long ullAvailPageFile;
public long ullTotalVirtual;
public long ullAvailVirtual;
public long ullAvailExtendedVirtual;
} // end of MEMORYSTATUSEX
|
http://msdn.microsoft.com/en-us/library/aa366772(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa366770(VS.85).aspx
|
|
Kommentaarid: 169 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
151 |
|
tagasi üles |
|
 |
arvutisõber
HV veteran

liitunud: 01.08.2002
|
23.06.2008 16:17:10
|
|
|
Tänud!
Ennem sai proovitud ka mitte-EX struktuuri koos GlobalMemoryStatus(x)-ga, aga nüüd selgus, et lihtsalt long tuli asendada int-ga.
Korrektne variant:
1. fail:
import com.sun.jna.*;
public class Nat
{
public static void main (String [] args)
{
Kernel32 lib = (Kernel32) Native.loadLibrary ("kernel32",
Kernel32.class);
Kernel32.MEMORYSTATUS mem = new Kernel32.MEMORYSTATUS ();
lib.GlobalMemoryStatus(mem);
System.out.println ("Available physical memory " + mem.dwAvailPhys);
System.out.println ("Total physical memory " + mem.dwTotalPhys);
} // End of main
} // End of file |
2. fail:
import com.sun.jna.*;
import com.sun.jna.win32.*;
public interface Kernel32 extends StdCallLibrary
{
public static class MEMORYSTATUS extends Structure
{
public int dwLength;
public int dwMemoryLoad;
public int dwTotalPhys;
public int dwAvailPhys;
public int dwTotalPageFile;
public int dwAvailPageFile;
public int dwTotalVirtual;
public int dwAvailVirtual;
} // end of MEMORYSTATUS
void GlobalMemoryStatus (MEMORYSTATUS result);
} // End of file
|
Tulemus:
Available physical memory 544854016
Total physical memory 1073201152
|
_________________ ... |
|
Kommentaarid: 55 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
53 |
|
tagasi üles |
|
 |
|