Nasza aplikacja kończy się niepowodzeniem na jednym komputerze użytkownika pod numerem ERROR_NOT_ENOUGH_MEMORY
("Brak wystarczającej ilości pamięci do przetworzenia tego polecenia").Rozwiązywanie problemów ERROR_NOT_ENOUGH_MEMORY
Błąd najwyraźniej powstaje gdzieś głęboko w ramach Delphi VCL, z którego korzystamy, więc nie jestem pewien, która funkcja Windows API jest odpowiedzialna.
Czy pamięć jest problemem? Wywołanie GlobalMemoryStatus
daje następujące informacje:
- dwTotalPhys - 1063150000 (~ 1 D)
- dwAvailPhys - 26735000 (~ 27 MB)
- dwAvailPage - 1489000000 (około 1,4 GB)
Wydaje mi się dziwne, że system Windows pozwoliłby na tak niską dostępną pamięć fizyczną, gdy dostępna jest tak duża ilość miejsca w pliku stronicowania, ale nie wiem wystarczająco dużo o zarządzaniu pamięcią wirtualną systemu Windows, aby wiedzieć, czy jest to normalne czy nie. . Czy to jest?
Jeśli nie ma pamięci, to jaki limit zasobów jest wysyłany? Z tego, co czytam online, wynika, że ERROR_NOT_ENOUGH_MEMORY
może być skutkiem zastosowania jednego z kilku ograniczeń (obiekty GDI, obiekty USER, uchwyty itp.) I niekoniecznie pamięci. Czy istnieje pełna lista ograniczeń ograniczających działanie systemu Windows? Czy jest jakiś sposób, aby dowiedzieć się, który limit został trafiony? Próbowałem Google, ale nie mogłem znaleźć żadnego systematycznego przeglądu.
GDI to mój pierwszy port zawinięcia. Chociaż to dziwne, że dzieje się to tylko na komputerze jednego użytkownika, to tam zaczynałem. Może to być również liczba używanych uchwytów itp. Powodzenia! –