What a big, big post !
Well, despite the fact that my soft may be the best in his category, and have unique functions like handling minimized Windows or distribute each instances of a process on different "autorized" CPU, I know that statistics features are really missing
(Hum, a very big sentence, I'm not sure it's understandable ...)
In fact, the problem is in the .Net Framework itself : there are no functions to know time used on each CPU.
All you can have, is the total CPU time used for each process, but without the details about each CPU.
For exemple, if a process run on CPU 1 and 2, I can't know if it use 25% of CPU1 and 25% of CPU, all I know is this process is user 50% of the whole processor.
So, I know the functions you mention are missing, but at this time, I can't implement them "natively". I have to look into windows API, but I don't have a great knowledge of them
What is possible "quite easily", is having a list of how many processes are autorized to run on each CPU, based on current running processes.
An little exemple with two process.
You create rules for two process :
- Process A, autorized on CPU1
- Process B : autorized on CPU+CPU2
I can generate a list :
CPU1 : 1 process autorized
CPU2 : 2 process autorized
This can help to have a better manual balancing.
BUT, the problem is you don't use you computer identically each day.
So a repartition will be OK on monday, and can be worse on tuesday.
What I recommand is simple : put on the same CPU the soft you don't use at the same time!
For exemple, you can put all your games on CPU2, because you can use only one game at the same moment.
And on this CPU, you can also put enconding softs, if you don't encode during games
I think your current repartition (seen on the forum you mention) is really good.
And I kown my soft lacks stats functions, but such features are really very hard to implement in .Net.
However, I plan to do something to compensate for this issue.
Now, about you suggestion feature (dynamic affintiy changing).
I've done tests, with Celestia (Yes, I love this soft !)
Windows use dynamic repartition!
If you launch two Celestia processes on CPU1, and then autorize one instance to use CPU1+2, then each instance will use 100% of one CPU.
Then if you close the "first" celestia, then Window will "switch" the second Celestia from CPU2 to CPU1 (because the process can use the two CPU, but Celestia isn't multithreaded.)
Because my soft "force" affinity on one CPU (generally), Windows management is not applied. And it is what my soft is done for!
Dynamically change affinity require to know what CPU is overloaded, and Is I mention is an other message, the .Net Framework does't have functions to compute those informations.
What you can do is a little bit far-fetched:
Create all rules using only 3 CPU, but allow certains "big CPU consumming" programs to use CPU4 if necessary.
As you have associated CPU4 with games, it will be a good deal to test.
With this repartition, if 2 processes use to much CPU, Windows will be autorized to "put" them on CPU4 "dynamically".
This way, you can use integrated windows management - that is not so bad in fact - and have the ability to "manually" manage you processes using Bill2's Process Manager.
Does my suggestion sounds good to you?