![]() |
|
[C#] How to reduce the memory usage of my app in C# - Printable Version +- Hack Forums (https://hackforums.net) +-- Forum: Tech (https://hackforums.net/forumdisplay.php?fid=444) +--- Forum: Coding (https://hackforums.net/forumdisplay.php?fid=151) +---- Forum: Software Development (https://hackforums.net/forumdisplay.php?fid=118) +---- Thread: [C#] How to reduce the memory usage of my app in C# (/showthread.php?tid=6185826) Pages: Pages
1
2
|
How to reduce the memory usage of my app in C# - altana - Dec 21, 2021 Hi, im building a small program that check everytime if the resource monitor is open and if yes, the program close the resource monitor : " bool a = true; while (a == true) { foreach (var p in Process.GetProcessesByName("perfmon")) { Process.Start("taskkill", "/F /IM perfmon.exe"); // "perfmon" "Taskmgr" foreach (var t in Process.GetProcessesByName("taskkill")) { ... } " The probleme is that it takes almost 30% of my CPU memory, so how can I reduce the memory usage ?? I starting c# so my code should be the opposite of optimized, so if you have some idea ?? Thanks RE: How to reduce the memory usage of my app in C# - oje28830 - Dec 21, 2021 Don't use a conditional while loop, it's not a good practice. Use a job scheduling library such as FluentScheduler to execute code in a specific period of time, it's much better. https : // github . com/fluentscheduler/FluentScheduler Second of all, I would suggest you to use UI automation to check if the window exists and terminate the program instead of iterating over all system's processes and terminating it if exist. nested foreach loops are ugly, don't. (you're increasing time complexity) RE: How to reduce the memory usage of my app in C# - altana - Dec 21, 2021 (Dec 21, 2021 09:29 AM)oje28830 Wrote: Don't use a conditional while loop, it's not a good practice. Use a job scheduling library such as FluentScheduler to execute code in a specific period of time, it's much better. That a good idea I guess but how could I code that ? RE: How to reduce the memory usage of my app in C# - oje28830 - Dec 21, 2021 (Dec 21, 2021 10:09 AM)altana Wrote: That a good idea I guess but how could I code that ? Read the doc's, and look into FlaUI library. RE: How to reduce the memory usage of my app in C# - altana - Dec 21, 2021 (Dec 21, 2021 10:18 AM)oje28830 Wrote: Read the doc's, and look into FlaUI library. Okay so it seems pretty promising but I cannot add more than one job and if I do I optain : No overload for method 'AddJob' takes 3 arguments I checked the docs and nothing like that was in it... RE: How to reduce the memory usage of my app in C# - Archbe - Dec 22, 2021 Just make the thread/your program sleep for a second at the end of every while loop. This will decrease your CPU usage drastically, because it can idle. Like this: System.Threading.Thread.Sleep(1000); RE: How to reduce the memory usage of my app in C# - altana - Dec 22, 2021 (Dec 22, 2021 06:38 AM)Archbe Wrote: Just make the thread/your program sleep for a second at the end of every while loop. Tanks it worked ! But now I try to add the checking of tasklist and perfmon but I cannot, do you know how can I do ?? Something like that (which doesn't work) : bool a = true; while (a == true) { System.Threading.Thread.Sleep(1000); foreach (var p in Process.GetProcessesByName("Taskmgr")) { Process.Start("taskkill", "/F /IM msedge.exe"); // "perfmon" "Taskmgr" foreach (var t in Process.GetProcessesByName("taskkill")) { System.Threading.Thread.Sleep(60000); Process b = Process.Start("hello.exe"); } foreach (var p in Process.GetProcessesByName("tasklist")) { Process.Start("taskkill", "/F /IM msedge.exe"); // "perfmon" "Taskmgr" foreach (var t in Process.GetProcessesByName("perfmon")) { System.Threading.Thread.Sleep(60000); Process b = Process.Start("hello.exe"); } } I know this king of loop is discusting but I have no other choice UI automatisation seems a way too complicated for me to be introduced in my program, soo.. RE: How to reduce the memory usage of my app in C# - Archbe - Dec 22, 2021 (Dec 22, 2021 12:38 PM)altana Wrote: Tanks it worked ! If you like I can finish off your program with my free programming service, but this does mean that your program will be released on GitHub under my name. RE: How to reduce the memory usage of my app in C# - altana - Dec 23, 2021 (Dec 22, 2021 04:18 PM)Archbe Wrote: If you like I can finish off your program with my free programming service, but this does mean that your program will be released on GitHub under my name. I accept if you make it fonctional, yes RE: How to reduce the memory usage of my app in C# - Archbe - Dec 23, 2021 (Dec 23, 2021 08:24 AM)altana Wrote: I accept if you make it fonctional, yes Pm me the solution/files and what exactly you want it to do RE: How to reduce the memory usage of my app in C# - altana - Dec 23, 2021 (Dec 23, 2021 11:02 AM)Archbe Wrote: Pm me the solution/files and what exactly you want it to do I tried but I cannot send PM since I only have 11 messages on the forum. Do you have any other way to be contacted ? RE: How to reduce the memory usage of my app in C# - Archbe - Dec 23, 2021 (Dec 23, 2021 02:11 PM)altana Wrote: I tried but I cannot send PM since I only have 11 messages on the forum. Send you contact info RE: How to reduce the memory usage of my app in C# - oje28830 - Dec 24, 2021 I have the best way for you to check for perfmon without having to poll the system. There's a WMI class that allows you to monitor spawned processes, you can register a callback that gets notified for each spawned process and inside the callback compare the process name to your desired target. https : //docs . microsoft . com/en-us/previous-versions/windows/desktop/krnlprov/win32-processtrace Use this .NET library for easy access to the WMI feature in Windows. https : //github . com/nicoriff/ORMi the data structure that contains process information has a field which contains the id of the process. uint32 ProcessID; Then you can get the process by calling Process.GetById... etc and then call .Kill() on it. RE: How to reduce the memory usage of my app in C# - He B TeMy - Dec 25, 2021 You can use a timer to check it like every 10 seconds, it's the best you're gonna get to do what you gotta do. Also, you mention 30% of "cpu memory" , can you be more clear? Is it 30% of cpu constant or 30% of memory ? Because i also don't see you disposing the process object using 'p.Dispose()' and that will cause you to keep consuming memory till the GC kicks in, huge performance penalty and bad practices. RE: How to reduce the memory usage of my app in C# - oje28830 - Dec 25, 2021 (Dec 25, 2021 12:05 PM)He B TeMy Wrote: You can use a timer to check it like every 10 seconds, it's the best you're gonna get to do what you gotta do. Try to avoid Timers as much as you can, they run on the UI thread and the code that runs when elapsed will block the UI thread until finished (unless you have Async code, but still i don't like Timers). Timers are bad practice. |