C# Aktuelle (maximale) CPU Freuenz auslesen (Overclocked)

cooldiman1

Lt. Junior Grade
Registriert
Dez. 2011
Beiträge
299
Hallo CB-Helfer,
ich habe mich jetzt wiedermal dumm gegooglelt aber ich komme seit Tage nicht weiter.

Ich möchte die aktuelle CPU Frequenz eines CPU Cores auslesen und das sollte auf Windows 7,8,10 funktionieren.


i7 6700K @4,4GHz (Standart 4GHz)

Mein Problem:
Ich bekomme immer nur die von der CPU angegeben Frequenz raus nämlich 4001MHz aber meine Prozessor läuft auf ca. 4400MHz. HWInfo und der Taskmanager bestätigen das auch.
Theoretisch brauche ich nur den maximalen overclocked Takt und will ihn nicht immer wieder neu abfragen. Brauche keine Überwachung der Frequenz :)

Mit dem hier klappt es z.B nicht:
Code:
using System.Management;

ManagementObjectSearcher searcher;
ManagementObjectCollection results;

foreach (ManagementObject result in results)
            {
                return result["CurrentClockSpeed"].ToString();
            }

Ist nur ein Ausschnitt aus meiner Class aber dort bekomme ich wieder nur die 4001MHz angegeben und nicht den wirklichen aktuellen Takt eines Kerns.

Ich habe auch schon das versucht:
Code:
[DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceCounter(
            out long lpPerformanceCount);

        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceFrequency(
            out long lpFrequency);


Wenn ich mir aber die Frequenz geben lasse kommt dort 3914066 heraus womit ich nicht direkt etwas anfangen kann.


Kann mir jemand den richtigen Lösungsansatz sagen.
Ich verwende C# und habe relativ wenig Erfahrung mit C++.

Danke,
cooldi
 
Zuletzt bearbeitet:
CPUZ verwenden.

Oder muss das selbst programmiert sein? Dann weiss ich auch nicht :D
 
Ich brauche die Wert in meinem eigenem Programm.
HWINFO habe ich angeschrieben wegen der Nutzung deren SDK´s , aber die melden sich einfach nicht zurück.

EDIT:

Der Taskmanager muss das doch auch irgendwie auslesen.
Kann ich das nicht nutzen ?
 
Zuletzt bearbeitet:
Ich hatte das kürzlich auch mal probiert. Versuch mal http://openhardwaremonitor.org/. Da ist eine DLL dabei, die als API dient. Eine Dokumentation gibt es glaube ich nicht, aber mit etwas rumprobieren hatte ich es irgendwann geschafft.
 
@trialgod ... Perfekt Danke dir :) Habs von github und werde es nun auseinandernehmen :D

Edit:
http://openhardwaremonitor.org/.
Falls jemand das selbe versucht mit dem Programm und das Problem hat dass er keine Frequenz oder Temperaturwerte bekommt dann müsst ihr das Programm bzw. Visual Studio als Admin starten. Danke auch wieder an trailgod :D
 
Zuletzt bearbeitet:
Code:
using System.Management;

void ReportCPUFreq()
{
    string cpu_freq = "";
    string max_freq = "";
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor");
    ManagementObjectCollection results = searcher.Get();

    foreach (ManagementObject result in results)
    {
        cpu_freq = result["CurrentClockSpeed"].ToString();
        max_freq = result["MaxClockSpeed"].ToString();
        break;
    }

    MessageBox.Show(cpu_freq + " MHz / " + max_freq + " MHz");
}

Ich hab den obigen Code etwas abgewandelt und bei mir mal getestet. Der liefert bei mir die korrekte Frequenz in MHz (hier "3500"), wobei bei mir keine übertaktete CPU vorliegt.

Ich hab den Code nochmal etwas erweitert. Es gibt wohl auch "MaxClockSpeed".
"CurrentClockSpeed" scheint wohl im Zusammenhang mit CPU's, die eine Taktanpassung unterstützen, die aktuelle Frequenz dazustellen.

Gruß slash
 
Zuletzt bearbeitet:
Zurück
Oben