Festplatte Energie Sparmodus
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Festplatte Energie Sparmodus
hi,
Es ist ja "nicht gut" für Xbase++ Applicationen wenn die Festplatte in
"standby" geht. Die Problem wird scheinbar um so grösser je mehr RAM
man hat. Er geht wohl zuerst durch das RAM und wenn er "durch" ist erst
auf die Festplatte.
Nun frage ich nach eine API wo man den "Energie" Modus der Festplatte
abfragen / setzten kann um zu verhindern das sowas passiert den der
(DA)User kommt ja an diese Einstellung ran ...
Es ist ja "nicht gut" für Xbase++ Applicationen wenn die Festplatte in
"standby" geht. Die Problem wird scheinbar um so grösser je mehr RAM
man hat. Er geht wohl zuerst durch das RAM und wenn er "durch" ist erst
auf die Festplatte.
Nun frage ich nach eine API wo man den "Energie" Modus der Festplatte
abfragen / setzten kann um zu verhindern das sowas passiert den der
(DA)User kommt ja an diese Einstellung ran ...
gruss by OHR
Jimmy
Jimmy
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Hallo, Jimmy.
Ich kann mir nicht vorstellen, daß es eine Windows-API-Funktion gibt, die das abzufragen in der Lage ist, da lange nicht alle Festplatten diesen Modus kennen. Da ist m.E. Direktzugriff auf den Treiber nötig.
BTW, auch eine lustige Einstellung ist "Computer kann Gerät ausschalten, um Energie zu sparen" bei Netzwerkkarten. Gerade bei den billigeren Modellen kann das dazu führen, daß man die Handles auf eigentlich geöffnete Dateien verliert, weil das OS der Meinung ist, daß das Netzwerklaufwerk nicht mehr verfügbar ist.
Ich kann mir nicht vorstellen, daß es eine Windows-API-Funktion gibt, die das abzufragen in der Lage ist, da lange nicht alle Festplatten diesen Modus kennen. Da ist m.E. Direktzugriff auf den Treiber nötig.
BTW, auch eine lustige Einstellung ist "Computer kann Gerät ausschalten, um Energie zu sparen" bei Netzwerkkarten. Gerade bei den billigeren Modellen kann das dazu führen, daß man die Handles auf eigentlich geöffnete Dateien verliert, weil das OS der Meinung ist, daß das Netzwerklaufwerk nicht mehr verfügbar ist.
Herzlich,
Tom
Tom
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2936
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
könnte es sein das man es mit "Powrprof.dll" die HD-Sleep Einstellungen bekommt ?
GetDevicePowerState()
http://msdn2.microsoft.com/en-us/librar ... S.85).aspx
komme ...
Günter ... please help !
könnte es sein das man es mit "Powrprof.dll" die HD-Sleep Einstellungen bekommt ?
GetDevicePowerState()
http://msdn2.microsoft.com/en-us/librar ... S.85).aspx
oder/// <summary>
/// Checks is a HDD is currently sleeping (wound down)
/// </summary>
/// <param name="deviceID">Integer value for volume, eg. 0</param>
/// <returns>Boolean value stating if the hdd in question is sleeping</returns>
public bool DriveAlseep(int deviceID)
{
// call power state api and return if drive is asleep
bool fOn = false, ret = true;
System.IntPtr ioHandle = this.getDeviceHandle(deviceID);
if (ioHandle != System.IntPtr.Zero && cPower.GetDevicePowerState(ioHandle, out fOn))
ret = fOn;
cPower.CloseHandle(ioHandle);
return !ret;
ich habe aber keine Ahnung wie ich an das "Device" handle der Festplatteprotected string ReportDiskStatus()
{
string status = string.Empty;
bool fOn = false;
Assembly assembly = Assembly.GetExecutingAssembly();
FileStream[] files = assembly.GetFiles();
if (files.Length > 0)
{
IntPtr hFile = files[0].Handle;
bool result = GetDevicePowerState(hFile, out fOn);
if (result)
{
if (fOn)
{
status = "Disk is powered up and spinning";
}
else
{
status = "Disk is sleeping";
}
}
else
{
status = "Cannot get Disk Status";
}
Console.WriteLine(status);
}
return status;
}
komme ...
Günter ... please help !
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Jimmy,
wo siehst du da ein Problem ?
Ein laufendes Programm mit offenen Dateien greift doch öffters auf Festplatten zu, sodass diese keine 15 Minuten ohne Benutzung registrieren und auch nicht abschalten ... ?
Selbst wenn ich nichts mache und mich dann am 'eingeschlafenen PC' wieder anmelde Bildschirmschoner, reicht das doch aus um die Festplatte zu starten, bevor ich überhaupt am Programm was machen kann oder ?
Ich habe diese Stromspareinstellung selbst auf einem kleinen 'Server' aktiviert, aber keine Probleme ... hat nur etwas gedauert beim ersten Zugriff.
wo siehst du da ein Problem ?
Ein laufendes Programm mit offenen Dateien greift doch öffters auf Festplatten zu, sodass diese keine 15 Minuten ohne Benutzung registrieren und auch nicht abschalten ... ?
Selbst wenn ich nichts mache und mich dann am 'eingeschlafenen PC' wieder anmelde Bildschirmschoner, reicht das doch aus um die Festplatte zu starten, bevor ich überhaupt am Programm was machen kann oder ?
Ich habe diese Stromspareinstellung selbst auf einem kleinen 'Server' aktiviert, aber keine Probleme ... hat nur etwas gedauert beim ersten Zugriff.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
bei dir d.h. wenn ich ein CMD Fenster aufrufe dauert es eine Weile bis
der das Fenster aufmacht. Allerdings ist das auch scheinbar von RAM
abhängig "wie schnell" er darauf zugreift. Je mehr RAM desdo länger dauert es bis er auf die Festplatte zugreifen will ...
Nun habe ich ja "die" Workstation (P3V4X-E) der ich mehr RAM gegeben
habe die wieder mal Probleme gemacht hat. Im Logbuch "sah" ich das sie
vorher wohl Mittagspause gemacht hat und der Energie Modus auf 1Std
für die Festplatte stand. (Obwohl ich ihn auf 0 gestellt hatte ...)
Nun kommt der "Witz" : Im Logbuch sind vor der Fehler noch Einträge d.h.
es sind noch Daten bearbeitet worden bevor der Fehler auftrat. Also hab
ich mal mit dem RAM experimentiert und mehr/weniger versucht. Dabei
stellte ich dan wieder fest das es länger dauerte wenn ich mehr RAM habe
bis der Fehler kommt und die Menge an "geschriebenen" Daten
proportional zum RAM ist.
Nun ist mir vorher schon aufgefallen das ich im Novell Netzwerk vieles aus
dem "Cache" gemacht wird und auch ein COMMIT den "Cache" nicht gleich
"leert" d.h. die Festplatte wird nicht immer aus dem "Schafmodus geweckt".
Bei "dem" PC ist es nun extrem d.h. es kommt ein Fehler nachdem er den
"Cache" geleert hat und "nachladen" will. Also muss ich verhindern das
ein User das Timeout > 0 setzt bzw. eine Meldung an mich.
Das es bei andere Hardware nicht so passiert kann ich an meinen alten
Notebook sehen (Compaq E500, 900MHz, 512MB). Da kann ich in den
Standby wenn ich den Deckel schliesse und später genau an der Stelle
weiterarbeiten ... ohne Probleme.
Allerdings macht das wohl nicht jedes Notebook den in der 337 gibt es
extra nun den Event :SystemPowerStatus() was genau dafür gedacht
ist wenn ein User den Laptop-Deckel schliesst.
Es hängt wohl auch von der Hardware ab. Bei meinem P4 ist es so wiebrandelh hat geschrieben: wo siehst du da ein Problem ?
Ich habe diese Stromspareinstellung selbst auf einem kleinen 'Server' aktiviert, aber keine Probleme ... hat nur etwas gedauert beim ersten Zugriff.
bei dir d.h. wenn ich ein CMD Fenster aufrufe dauert es eine Weile bis
der das Fenster aufmacht. Allerdings ist das auch scheinbar von RAM
abhängig "wie schnell" er darauf zugreift. Je mehr RAM desdo länger dauert es bis er auf die Festplatte zugreifen will ...
Nun habe ich ja "die" Workstation (P3V4X-E) der ich mehr RAM gegeben
habe die wieder mal Probleme gemacht hat. Im Logbuch "sah" ich das sie
vorher wohl Mittagspause gemacht hat und der Energie Modus auf 1Std
für die Festplatte stand. (Obwohl ich ihn auf 0 gestellt hatte ...)
Nun kommt der "Witz" : Im Logbuch sind vor der Fehler noch Einträge d.h.
es sind noch Daten bearbeitet worden bevor der Fehler auftrat. Also hab
ich mal mit dem RAM experimentiert und mehr/weniger versucht. Dabei
stellte ich dan wieder fest das es länger dauerte wenn ich mehr RAM habe
bis der Fehler kommt und die Menge an "geschriebenen" Daten
proportional zum RAM ist.
Nun ist mir vorher schon aufgefallen das ich im Novell Netzwerk vieles aus
dem "Cache" gemacht wird und auch ein COMMIT den "Cache" nicht gleich
"leert" d.h. die Festplatte wird nicht immer aus dem "Schafmodus geweckt".
Bei "dem" PC ist es nun extrem d.h. es kommt ein Fehler nachdem er den
"Cache" geleert hat und "nachladen" will. Also muss ich verhindern das
ein User das Timeout > 0 setzt bzw. eine Meldung an mich.
Das es bei andere Hardware nicht so passiert kann ich an meinen alten
Notebook sehen (Compaq E500, 900MHz, 512MB). Da kann ich in den
Standby wenn ich den Deckel schliesse und später genau an der Stelle
weiterarbeiten ... ohne Probleme.
Allerdings macht das wohl nicht jedes Notebook den in der 337 gibt es
extra nun den Event :SystemPowerStatus() was genau dafür gedacht
ist wenn ein User den Laptop-Deckel schliesst.
gruss by OHR
Jimmy
Jimmy