Prosty program i System.OutOfMemoryException

0

Cześć,
tworzę prosty program który ma mi pomóc w weryfikowaniu konfiguracji komputerów w pracy.
Cały program składa się z kilkunastu zapytań do WMI.
Np. coś takiego:

            ManagementObjectSearcher Win32PhysicalMemory = new ManagementObjectSearcher("SELECT Capacity, DeviceLocator, FormFactor, Manufacturer, MemoryType, PartNumber, SerialNumber, Speed, ConfiguredVoltage FROM Win32_PhysicalMemory");

            List<PhysicalMemory> ramList = new List<PhysicalMemory>();

            foreach (ManagementObject obj in Win32PhysicalMemory.Get())
            {
                ramList.Add(new PhysicalMemory()
                {
                    Capacity = obj["Capacity"].ToString(),
                    DeviceLocator = obj["DeviceLocator"].ToString(),
                    FormFactor = obj["FormFactor"].ToString(),
                    Manufacturer = obj["Manufacturer"].ToString(),
                    MemoryType = obj["MemoryType"].ToString(),
                    PartNumber = obj["PartNumber"].ToString(),
                    SerialNumber = obj["SerialNumber"].ToString(),
                    Speed = obj["Speed"].ToString(),
                    ConfiguredVoltage = obj["ConfiguredVoltage"].ToString()
                });
            }

            foreach (var ram in ramList)
            {
                Console.WriteLine("- Device Locator: " + ram.DeviceLocator);
                Console.WriteLine("     Capacity: " + Int64.Parse(ram.Capacity) / 1073741824 + "GB");
                Console.WriteLine("     Manufacturer: " + ram.Manufacturer);
                Console.WriteLine("     Part number: " + ram.PartNumber);
                Console.WriteLine("     Serial number: " + ram.SerialNumber);
                Console.WriteLine("     Form factor: " + ram.FormFactor);
                Console.WriteLine("     MemoryType: " + ram.MemoryType);
                Console.WriteLine("     Speed: " + ram.Speed + "MHz");
                Console.WriteLine("     Voltage: " + float.Parse(ram.ConfiguredVoltage) / 1000 + "V");
            }

i niestety z nieznanych mi przyczyn co uruchomienie dostaje naprzemiennie komunikaty:
"Wystąpił nieobsługiwany wyjątek typu „System.Management.ManagementException” w System.Management.dll
The supplied buffer was too small "

"Wystąpił nieobsługiwany wyjątek typu „System.OutOfMemoryException” w Dane testowe.exe
Za mało pamięci, aby kontynuować wykonywanie tego programu."

"Zgłoszony wyjątek: „System.Management.ManagementException” w System.Management.dll
Wystąpił nieobsługiwany wyjątek typu „System.Management.ManagementException” w System.Management.dll"

Wykres pamięci w Visual Studio pokazuje maksymalnie 91MB a laptop na którym pracuje ma 16GB pamięci z czego 8 jest wolne. W czym może tkwić problem? Być może jest to absurdalny błąd ponieważ nie zajmuję się na co dzień programowaniem i jest to mój 1 program w tym języku.

0

PhysicalMemory jest twoją klasą prawda? Pokaż jej budowę

0

PhysicalMemory wygląda tak:

class PhysicalMemory
    {
        public string Capacity { get; set; }
        public string DeviceLocator { get; set; }
        private string _FormFactor;
        public string FormFactor 
        {        
            get
            {
                switch(_FormFactor)
                {
                    case "0":
                        _FormFactor = "Unknown";
                        break;
                    case "1":
                        _FormFactor = "Other";
                        break;
                    case "2":
                        _FormFactor = "SIP";
                        break;
                    case "3":
                        _FormFactor = "DIP";
                        break;
                    case "4":
                        _FormFactor = "ZIP";
                        break;
                    case "5":
                        _FormFactor = "SOJ";
                        break;
                    case "6":
                        _FormFactor = "Proprietary";
                        break;
                    case "7":
                        _FormFactor = "SIMM";
                        break;
                    case "8":
                        _FormFactor = "DIMM";
                        break;
                    case "9":
                        _FormFactor = "TSOP";
                        break;
                    case "10":
                        _FormFactor = "PGA";
                        break;
                    case "11":
                        _FormFactor = "RIMM";
                        break;
                    case "12":
                        _FormFactor = "SODIMM";
                        break;
                    case "13":
                        _FormFactor = "SRIMM";
                        break;
                    case "14":
                        _FormFactor = "SMD";
                        break;
                    case "15":
                        _FormFactor = "SSMP";
                        break;
                    case "16":
                        _FormFactor = "QFP";
                        break;
                    case "17":
                        _FormFactor = "TQFP";
                        break;
                    case "18":
                        _FormFactor = "SOIC";
                        break;
                    case "19":
                        _FormFactor = "LCC";
                        break;
                    case "20":
                        _FormFactor = "PLCC";
                        break;
                    case "21":
                        _FormFactor = "BGA";
                        break;
                    case "22":
                        _FormFactor = "FPBGA";
                        break;
                    case "23":
                        _FormFactor = "LGA";
                        break;
                    default:
                        _FormFactor = "Unknown";
                        break;
                }

                return _FormFactor;
            }

            set
            {
                _FormFactor = value;
            }
        }

mam jeszcze w kodzie kilka podobnych klas jednak każda z nich jest na to samo kopyto. OutOfMemoryException wyskakuje losowo na każdej z nich. Cały kod jest dostępny tutaj: https://pastebin.com/a27VyLrC

0

Skopiowałem twój kod i uruchomiłem u siebie oraz na serwerze. Na obu maszynach bez problemu się uruchamia, nawet po kilka razy. Próbujesz to uruchomić na Windowsie 10?

0

Tak, uruchamiam to na Windows 10 Home. Teraz zauważyłem, że jak uruchamiam ręcznie plik .exe to program się wykrzacza dużo rzadziej (raz na kilkanaście uruchomień). Najwięcej tego wyskakuje jak klikam "Rozpocznij" z zieloną strzałką w Visual Studio 2019. Aby program mi się uruchomił do końca muszę z 3-4 razy zakończyć i uruchomić jeszcze raz. Wygląda to tak https://imgur.com/a/bIV7udN

0

Włączyłem jeszcze parę razy na służbowym lapie i też nie ma ani jednego błędu, czy to "oficjalnie" z .exe czy przez VS 2019. Mam wrażenie, że to jest jakiś twój indywidualny problem. Może problem z instalacją VS, może jakieś ustawienie w wersji Preview, które sobie nie radzi z tym przypadkiem. Może problem z RAMem.

PS.
Jeśli wyświetlasz te dane w konsoli to po co zapisywać je do listy? Później i tak w pętli po tej liście lecisz 🤔
Wyświetlaj je od razu zamiast tworzyć obiekty.

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