Immer mehr private bytes :(
-
Du kannst deinen vector auch jede Sekunde clearen und er belegt trotzdem noch den gleichen Speicher!!
Nach oben hin verändert nen vector seine Größe dynamisch,nach unten hin nicht.Da musst du schon mit nem swap nachhelfen wie es dir Plotzenhotz schon gezeigt hat.
Was sagt dir capacity wenn dein Programm 8 Stunden gelaufen ist?
Lass das doch einfach in eine Datei schreiben.Gruß Spacelord
-
Ja, aber, es ist doch so:
Zwei von 3 vectoren werden nur im Konstruktor aufgefüllt und danach nicht mehr "gepusht". (configRow und bannedRow, das sind die Zeilen der Textdateien)
kickList wird bei Bedarf mit bis zu maximal 64 Elementen gepusht. Danach wird .clear() aufgerufen. Und nach 10 Sekunden werden wieder maximal 64 Elemente gepusht.
Was also reserviert sich den ganzen Speicher...
-
Nun, es wird ja auch jemanden geben, der Deine Klasse einsetzt. Hast Du diese Umgebung abgesucht ?
@Plotzenhotz registrier Dich doch mal bitte, dann weiss man wenigstens das immer der gleiche schreibt =o)
-
Hello!
Nein, bis jetzt habe nur ich das Programm so lange am laufen.
Wird auf nem anderen PC aber ned anders sein, denke ich.Leider muss ich des öfteren die Anwendung neu starten, wenn ich IP's zur Textdatei adde. Aber ich werde versuchen, das Teil mal wirklich lange laufen zu lassen. Wiegesagt, an den vectoren liegt es nicht. kickList fasst maximal 64 Player-ID's.
Ach, noch eine kleine Frage: Wie lange läuft Windows XP Prof. ohne Absturz? Hab mal gehört, das soll Begrenzt sein. Was für'n Beschiss!
-
Der von Dir gezeigte Quellcode hat keinen gültigen Einstiegspunkt. Also wird es noch etwas drum herum geben was die Klasse benutzt.
Generell kann man nur jemanden helfen, der auch hilfe haben will.
-
Sorry!
Aber da passiert nichts besonderes.
//// < M A I N F U N C T I O N > //////////////// int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { Window& window = Window::getInstance(); window.Init(hInstance); window.Create(); SlowBob slowBob; MSG msg = {0}; while(msg.message != WM_QUIT) { if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else slowBob.Tick(); } window.Destroy(); return 0; }
-
kann es sein das dein ListCtrl den Speicher 'frist' , weil nach 6 oder 8 Stunden tausende Zeilen drin stehen?
-
Wenn ein Programm immer mehr Speicher verbraucht, dann ist es in der Regel eine gute Idee, sich mal anzuschauen, was im Speicher nach einer Weile so drinsteht.
Mach einfach ein Memory Dump mit einem Programm wie T-Search.
-
Damit hab ich nix am Hut. Ich werd's dennoch probieren.
Wiegesagt, ich habe nur 3 std::vector's. Es kann ja nur an denen liegen, alles andere wird überschrieben!
configRow für alle Zeilen in config.txt
bannedRow für alle Zeilen in banned.txtABER: Diese vectoren werden nur im Konstruktor aufgefüllt, danach passiert mit denen KEIN push_back mehr.
Der letzte vector ist kickList, diese wird bis zu maximal 64x gepusht, und alle 10 Sekunden werden die Elemente wieder entfernt.
Unverständlich

-
Wenn es nur an den Vectoren liegen kann, weißt Du doch schon die Lösung, verstehe dann das nachfragen nicht.
-
Ich vermute es stark. Alle anderen Klassenmember werden doch nur überschrieben?...
Deshalb bin ich ratlos.
-
Heut waren es wieder über 5MB nach einigen Stunden.
Was kann noch so viel Speicher fressen außer die vectoren, die es ja codetechnisch gar nicht sein können? Schaut mal bei Tick(), sobald auch nur ein Element in kickList ist, wird Kick() aufgerufen, wo ohne Bedingung kickList.clear() aufgerufen wird.
-
Hey!
Ich frage mal so: Welches dieser Klassenmitglieder könnte so viel Speicher fressen? Es sind doch nur die vectoren, oder was kann sonst einige Megabyte verschlingen?
#ifndef INCLUDED_SLOWBOB #define INCLUDED_SLOWBOB //// < I N C L U D E S > ///////////////////////// #include <windows.h> #include <mmsystem.h> #include <string> #include <fstream> #include <vector> //// < C L A S S SlowBob > ////////////////////// class SlowBob { std::string windowTitle; HWND hWnd; HWND edit; HWND list; LRESULT currentRow; TCHAR recvText[128]; std::string s; std::string kickText; short oldJoinedPlayers; short joinedPlayers; short bannedPlayers; struct oldJoinedPlayer { std::string ip; std::string id; }; oldJoinedPlayer oldJoinedPlayer[64]; struct joinedPlayer { std::string ip; std::string id; }; joinedPlayer joinedPlayer[64]; std::ifstream configFile; std::ifstream bannedFile; std::vector<std::string> configRow; std::vector<std::string> bannedIp; std::string row; std::vector<std::string> kickList; float interval; float current; float elapsed; float old; public: SlowBob(); ~SlowBob(); void Tick(); void Check(); void Kick(); void SaveOld(); void getJoinedPlayers(); void getJoinedPlayerIds(); void getJoinedPlayerIps(); void sendText(std::string); void kickPlayer(std::string); }; #endif // INCLUDED_SLOWBOB
-
Hey!
Ich habe gerade jede halbe Stunde alle Klassenmembers in eine Datei geloggt und es ist nichts auffällig. Mit Speicher gucken und so hab ich's nicht drauf, null Ahnung. Also an den Klassenmitgliedern kann es nicht liegen.
Wie kann noch so viel Speicher belegt werden?
windowTitle: Vietcong v1.60 : BLACK PAJAMAS BLUE LAGUNA |FREE : 5425 hWnd: 00030152 edit: 00020144 list: 00020146 currentRow: 98 recvText[0]: [ recvText[1]: 1 recvText[2]: 5 recvText[3]: 0 recvText[4]: 6 recvText[5]: ] recvText[6]: recvText[7]: - recvText[8]: - recvText[9]: c recvText[10]: ! recvText[11]: _ recvText[12]: J recvText[13]: o recvText[14]: - recvText[15]: - recvText[16]: recvText[17]: k recvText[18]: i recvText[19]: l recvText[20]: l recvText[21]: s recvText[22]: : recvText[23]: recvText[24]: 1 recvText[25]: 2 recvText[26]: recvText[27]: recvText[28]: recvText[29]: d recvText[30]: e recvText[31]: a recvText[32]: t recvText[33]: h recvText[34]: s recvText[35]: : recvText[36]: recvText[37]: 7 recvText[38]: recvText[39]: recvText[40]: recvText[41]: p recvText[42]: i recvText[43]: n recvText[44]: g recvText[45]: : recvText[46]: recvText[47]: 9 recvText[48]: 3 recvText[49]: recvText[50]: n recvText[51]: g recvText[52]: : recvText[53]: recvText[54]: 1 recvText[55]: 0 recvText[56]: recvText[57]: 6 recvText[58]: 8 recvText[59]: recvText[60]: recvText[61]: recvText[62]: recvText[63]: recvText[64]: recvText[65]: recvText[66]: recvText[67]: recvText[68]: recvText[69]: recvText[70]: recvText[71]: recvText[72]: recvText[73]: recvText[74]: recvText[75]: recvText[76]: recvText[77]: recvText[78]: recvText[79]: recvText[80]: recvText[81]: recvText[82]: recvText[83]: recvText[84]: recvText[85]: recvText[86]: recvText[87]: recvText[88]: recvText[89]: recvText[90]: recvText[91]: recvText[92]: recvText[93]: recvText[94]: recvText[95]: recvText[96]: recvText[97]: recvText[98]: recvText[99]: recvText[100]: recvText[101]: recvText[102]: recvText[103]: recvText[104]: recvText[105]: recvText[106]: recvText[107]: recvText[108]: recvText[109]: recvText[110]: recvText[111]: recvText[112]: recvText[113]: recvText[114]: recvText[115]: recvText[116]: recvText[117]: recvText[118]: recvText[119]: recvText[120]: recvText[121]: recvText[122]: recvText[123]: recvText[124]: recvText[125]: recvText[126]: recvText[127]: s: [1506] --c!_Jo-- kills: 12 deaths: 7 ping: 93 kickText: Clearing kick list oldJoinedPlayers: 6 joinedPlayers: 6 bannedPlayers: 93 oldJoinedPlayer[0].ip: 89.58.24.128 oldJoinedPlayer[1].ip: 192.168.0.5 oldJoinedPlayer[2].ip: 87.122.219.241 oldJoinedPlayer[3].ip: 212.195.36.74 oldJoinedPlayer[4].ip: 80.188.186.184 oldJoinedPlayer[5].ip: 145.53.126.226 oldJoinedPlayer[6].ip: oldJoinedPlayer[7].ip: oldJoinedPlayer[8].ip: oldJoinedPlayer[9].ip: oldJoinedPlayer[10].ip: oldJoinedPlayer[11].ip: oldJoinedPlayer[12].ip: oldJoinedPlayer[13].ip: oldJoinedPlayer[14].ip: oldJoinedPlayer[15].ip: oldJoinedPlayer[16].ip: oldJoinedPlayer[17].ip: oldJoinedPlayer[18].ip: oldJoinedPlayer[19].ip: oldJoinedPlayer[20].ip: oldJoinedPlayer[21].ip: oldJoinedPlayer[22].ip: oldJoinedPlayer[23].ip: oldJoinedPlayer[24].ip: oldJoinedPlayer[25].ip: oldJoinedPlayer[26].ip: oldJoinedPlayer[27].ip: oldJoinedPlayer[28].ip: oldJoinedPlayer[29].ip: oldJoinedPlayer[30].ip: oldJoinedPlayer[31].ip: oldJoinedPlayer[32].ip: oldJoinedPlayer[33].ip: oldJoinedPlayer[34].ip: oldJoinedPlayer[35].ip: oldJoinedPlayer[36].ip: oldJoinedPlayer[37].ip: oldJoinedPlayer[38].ip: oldJoinedPlayer[39].ip: oldJoinedPlayer[40].ip: oldJoinedPlayer[41].ip: oldJoinedPlayer[42].ip: oldJoinedPlayer[43].ip: oldJoinedPlayer[44].ip: oldJoinedPlayer[45].ip: oldJoinedPlayer[46].ip: oldJoinedPlayer[47].ip: oldJoinedPlayer[48].ip: oldJoinedPlayer[49].ip: oldJoinedPlayer[50].ip: oldJoinedPlayer[51].ip: oldJoinedPlayer[52].ip: oldJoinedPlayer[53].ip: oldJoinedPlayer[54].ip: oldJoinedPlayer[55].ip: oldJoinedPlayer[56].ip: oldJoinedPlayer[57].ip: oldJoinedPlayer[58].ip: oldJoinedPlayer[59].ip: oldJoinedPlayer[60].ip: oldJoinedPlayer[61].ip: oldJoinedPlayer[62].ip: oldJoinedPlayer[63].ip: oldJoinedPlayer[0].id: 1506 oldJoinedPlayer[1].id: 1485 oldJoinedPlayer[2].id: 1508 oldJoinedPlayer[3].id: 1509 oldJoinedPlayer[4].id: 1511 oldJoinedPlayer[5].id: 1513 oldJoinedPlayer[6].id: oldJoinedPlayer[7].id: oldJoinedPlayer[8].id: oldJoinedPlayer[9].id: oldJoinedPlayer[10].id: oldJoinedPlayer[11].id: oldJoinedPlayer[12].id: oldJoinedPlayer[13].id: oldJoinedPlayer[14].id: oldJoinedPlayer[15].id: oldJoinedPlayer[16].id: oldJoinedPlayer[17].id: oldJoinedPlayer[18].id: oldJoinedPlayer[19].id: oldJoinedPlayer[20].id: oldJoinedPlayer[21].id: oldJoinedPlayer[22].id: oldJoinedPlayer[23].id: oldJoinedPlayer[24].id: oldJoinedPlayer[25].id: oldJoinedPlayer[26].id: oldJoinedPlayer[27].id: oldJoinedPlayer[28].id: oldJoinedPlayer[29].id: oldJoinedPlayer[30].id: oldJoinedPlayer[31].id: oldJoinedPlayer[32].id: oldJoinedPlayer[33].id: oldJoinedPlayer[34].id: oldJoinedPlayer[35].id: oldJoinedPlayer[36].id: oldJoinedPlayer[37].id: oldJoinedPlayer[38].id: oldJoinedPlayer[39].id: oldJoinedPlayer[40].id: oldJoinedPlayer[41].id: oldJoinedPlayer[42].id: oldJoinedPlayer[43].id: oldJoinedPlayer[44].id: oldJoinedPlayer[45].id: oldJoinedPlayer[46].id: oldJoinedPlayer[47].id: oldJoinedPlayer[48].id: oldJoinedPlayer[49].id: oldJoinedPlayer[50].id: oldJoinedPlayer[51].id: oldJoinedPlayer[52].id: oldJoinedPlayer[53].id: oldJoinedPlayer[54].id: oldJoinedPlayer[55].id: oldJoinedPlayer[56].id: oldJoinedPlayer[57].id: oldJoinedPlayer[58].id: oldJoinedPlayer[59].id: oldJoinedPlayer[60].id: oldJoinedPlayer[61].id: oldJoinedPlayer[62].id: oldJoinedPlayer[63].id: joinedPlayer[0].ip: joinedPlayer[1].ip: joinedPlayer[2].ip: joinedPlayer[3].ip: joinedPlayer[4].ip: joinedPlayer[5].ip: joinedPlayer[6].ip: joinedPlayer[7].ip: joinedPlayer[8].ip: joinedPlayer[9].ip: joinedPlayer[10].ip: joinedPlayer[11].ip: joinedPlayer[12].ip: joinedPlayer[13].ip: joinedPlayer[14].ip: joinedPlayer[15].ip: joinedPlayer[16].ip: joinedPlayer[17].ip: joinedPlayer[18].ip: joinedPlayer[19].ip: joinedPlayer[20].ip: joinedPlayer[21].ip: joinedPlayer[22].ip: joinedPlayer[23].ip: joinedPlayer[24].ip: joinedPlayer[25].ip: joinedPlayer[26].ip: joinedPlayer[27].ip: joinedPlayer[28].ip: joinedPlayer[29].ip: joinedPlayer[30].ip: joinedPlayer[31].ip: joinedPlayer[32].ip: joinedPlayer[33].ip: joinedPlayer[34].ip: joinedPlayer[35].ip: joinedPlayer[36].ip: joinedPlayer[37].ip: joinedPlayer[38].ip: joinedPlayer[39].ip: joinedPlayer[40].ip: joinedPlayer[41].ip: joinedPlayer[42].ip: joinedPlayer[43].ip: joinedPlayer[44].ip: joinedPlayer[45].ip: joinedPlayer[46].ip: joinedPlayer[47].ip: joinedPlayer[48].ip: joinedPlayer[49].ip: joinedPlayer[50].ip: joinedPlayer[51].ip: joinedPlayer[52].ip: joinedPlayer[53].ip: joinedPlayer[54].ip: joinedPlayer[55].ip: joinedPlayer[56].ip: joinedPlayer[57].ip: joinedPlayer[58].ip: joinedPlayer[59].ip: joinedPlayer[60].ip: joinedPlayer[61].ip: joinedPlayer[62].ip: joinedPlayer[63].ip: joinedPlayer[0].id: joinedPlayer[1].id: joinedPlayer[2].id: joinedPlayer[3].id: joinedPlayer[4].id: joinedPlayer[5].id: joinedPlayer[6].id: joinedPlayer[7].id: joinedPlayer[8].id: joinedPlayer[9].id: joinedPlayer[10].id: joinedPlayer[11].id: joinedPlayer[12].id: joinedPlayer[13].id: joinedPlayer[14].id: joinedPlayer[15].id: joinedPlayer[16].id: joinedPlayer[17].id: joinedPlayer[18].id: joinedPlayer[19].id: joinedPlayer[20].id: joinedPlayer[21].id: joinedPlayer[22].id: joinedPlayer[23].id: joinedPlayer[24].id: joinedPlayer[25].id: joinedPlayer[26].id: joinedPlayer[27].id: joinedPlayer[28].id: joinedPlayer[29].id: joinedPlayer[30].id: joinedPlayer[31].id: joinedPlayer[32].id: joinedPlayer[33].id: joinedPlayer[34].id: joinedPlayer[35].id: joinedPlayer[36].id: joinedPlayer[37].id: joinedPlayer[38].id: joinedPlayer[39].id: joinedPlayer[40].id: joinedPlayer[41].id: joinedPlayer[42].id: joinedPlayer[43].id: joinedPlayer[44].id: joinedPlayer[45].id: joinedPlayer[46].id: joinedPlayer[47].id: joinedPlayer[48].id: joinedPlayer[49].id: joinedPlayer[50].id: joinedPlayer[51].id: joinedPlayer[52].id: joinedPlayer[53].id: joinedPlayer[54].id: joinedPlayer[55].id: joinedPlayer[56].id: joinedPlayer[57].id: joinedPlayer[58].id: joinedPlayer[59].id: joinedPlayer[60].id: joinedPlayer[61].id: joinedPlayer[62].id: joinedPlayer[63].id: configRow[0]: Vietcong v1.60 : BLACK PAJAMAS BLUE LAGUNA |FREE : 5425 configRow[1]: 10 configRow[2]: Clearing kick list bannedIp[0]: 81.183.58.181 bannedIp[1]: 151.44.51.88 bannedIp[2]: 84.161.195.226 bannedIp[3]: 84.223.72.156 bannedIp[4]: 213.191.98.88 bannedIp[5]: 62.214.211.45 bannedIp[6]: 84.42.231.57 bannedIp[7]: 82.99.138.2 bannedIp[8]: 84.155.213.112 bannedIp[9]: 80.141.47.30 bannedIp[10]: 87.78.156.112 bannedIp[11]: 62.245.118.234 bannedIp[12]: 89.102.153.220 bannedIp[13]: 86.49.59.238 bannedIp[14]: 86.83.178.34 bannedIp[15]: 213.220.225.156 bannedIp[16]: 213.51.24.14 bannedIp[17]: 85.145.54.178 bannedIp[18]: 80.134.18.124 bannedIp[19]: 84.145.237.113 bannedIp[20]: 89.12.3.71 bannedIp[21]: 83.15.106.66 bannedIp[22]: 80.60.25.204 bannedIp[23]: 86.87.147.212 bannedIp[24]: 88.72.24.149 bannedIp[25]: 85.70.117.116 bannedIp[26]: 212.96.183.83 bannedIp[27]: 84.130.242.103 bannedIp[28]: 62.104.142.252 bannedIp[29]: 82.16.86.147 bannedIp[30]: 84.57.7.161 bannedIp[31]: 80.141.48.7 bannedIp[32]: 80.250.14.206 bannedIp[33]: 89.176.186.246 bannedIp[34]: 62.39.231.56 bannedIp[35]: 195.146.96.148 bannedIp[36]: 89.102.149.223 bannedIp[37]: 84.161.147.114 bannedIp[38]: 89.102.77.159 bannedIp[39]: 86.80.194.161 bannedIp[40]: 89.102.77.159 bannedIp[41]: 81.165.232.32 bannedIp[42]: 217.236.239.81 bannedIp[43]: 86.87.147.212 bannedIp[44]: 62.245.118.234 bannedIp[45]: 62.204.252.236 bannedIp[46]: 82.60.166.85 bannedIp[47]: 88.103.55.201 bannedIp[48]: 84.6.178.244 bannedIp[49]: 88.73.68.107 bannedIp[50]: 80.188.99.90 bannedIp[51]: 80.163.244.21 bannedIp[52]: 86.201.89.202 bannedIp[53]: 85.54.240.31 bannedIp[54]: 84.5.94.84 bannedIp[55]: 84.90.71.189 bannedIp[56]: 84.139.93.77 bannedIp[57]: 82.74.212.134 bannedIp[58]: 172.180.30.181 bannedIp[59]: 88.72.33.211 bannedIp[60]: 91.127.156.102 bannedIp[61]: 88.83.229.3 bannedIp[62]: 87.64.241.102 bannedIp[63]: 84.155.238.108 bannedIp[64]: 87.123.199.128 bannedIp[65]: 86.49.104.40 bannedIp[66]: 83.143.208.81 bannedIp[67]: 213.220.231.30 bannedIp[68]: 89.48.185.94 bannedIp[69]: 172.174.252.66 bannedIp[70]: 84.136.94.3 bannedIp[71]: 89.48.149.104 bannedIp[72]: 84.150.86.244 bannedIp[73]: 80.98.10.111 bannedIp[74]: 84.158.229.138 bannedIp[75]: 217.255.211.95 bannedIp[76]: 89.12.3.190 bannedIp[77]: 217.88.158.155 bannedIp[78]: 89.53.188.41 bannedIp[79]: 84.220.37.22 bannedIp[80]: 213.226.230.186 bannedIp[81]: 84.132.236.9 bannedIp[82]: 89.102.164.79 bannedIp[83]: 81.62.223.43 bannedIp[84]: 62.214.251.18 bannedIp[85]: 212.111.21.28 bannedIp[86]: 80.109.244.79 bannedIp[87]: 83.175.144.169 bannedIp[88]: 80.128.130.111 bannedIp[89]: 62.104.145.145 bannedIp[90]: 89.57.200.212 bannedIp[91]: 213.182.113.3 bannedIp[92]: 87.78.193.151 row: 87.78.193.151 interval: 10 current: 81122.6 elapsed: 9.19531 elapsed2: 1800 old: 81122.6Was kann nur 8MB und immer mehr belegen?
-
OK, Freund der Blasmusik & Gartenzwerge. Ich hab deinen Fehler gefunden. Bekomm ich jetzt ein Bier? Naja, egal. Du kannst nicht einfach eine Klasse oder Struct die ein std::string als Member hat mittels memset "löschen" und dann erwarten dass noch irgendwas geht. Und natürlich kannst du das auch nicht mit einem oder mehreren Arrays von Elementen so einer Klasse machen (struct oldJoinedPlayer und so, ring a bell?). Es ist fast schon ein Wunder dass das Programm dabei nicht abschmiert.
-
Ouch. Ich war mir ohnehin unsicher.
Wie macht man es denn richtig?
-
"richtig" wäre einen std::vector<DeineStruktur> zu nehmen, dann fällt auch das 1000 Einträge Limit weg. Oder aber du legst ein "DeineStruktur temp;" an, und übergibst das an std::fill. Auf jeden Fall sollte irgendwie der operator = verwendet werden, direkt oder indirekt.
-
Hey!
Und deshalb werden 8MB und mehr belegt?
Ich habe schon umgebaut.Wie setze ich alle Elemente eines Klassen-Arrays auf 0?
Das wollte ich durch memset erreichen, geht anscheinend anders...MfG
-
std::fill (Array.begin(), Array.end(), 0);
(inkludieren von <algorithm> nicht vergessen!)
-
struct joinedPlayer { std::string ip; std::string id; }; joinedPlayer joinedPlayer[64];Hier fange ich doch nichts mit std::fill an?