Welcome Guest! To enable all features please Login or Register.

Notification

Icon
Error

Easier "Ignore Completely"
willdean
#1 Posted : Wednesday, February 4, 2026 4:08:03 PM(UTC)
Rank: Advanced Member

Groups: Registered
Joined: 1/31/2012(UTC)
Posts: 38
Location: England

Thanks: 8 times
Was thanked: 4 time(s) in 4 post(s)

Pure feature request, love the product, etc...

Far and away the most common "configuration" action I perform in NCrunch is to ignore projects. This is because our solutions always seem to be acreting little utilities, etc, which we don't want NCrunch to spend a single cycle or a single byte on supporting.

But it's something of a faff to disable projects:

* Go to "Configuration" (somewhere in the middle of a long menu)
* Decide if you need to be looking at "My Settings" or "Shared Settings" - and accomodate the vague feeling that whichever one you picked might have been the wrong one.
* Find the project (they're grey-on-blue or light-grey-on-blue)
* Find the "Ignore this component completely" option - it's the 4th one down in the 2nd sub-category
* Use a combo box to make a true/false selection (believe me, I sympathise with the motivations for this on the programmer's side, but it's horrible UX...)
[ Chosing to ignore a project now causes NCrunch to restart completely and reload all the other projects.]
* Wait for this restart to settle down and then repeat for the next project you want to ignore

I don't feel I'm special-pleading for my own favourite option here: "ignore completely" is fundamentally different to all the other options (because it supercedes everything else), and I think it should have special treatment, not be buried in among everything else.

So:
* Please could we have something like a checkbox or a right-click option on each project to allow us to ignore it, perhaps even in the "main" NCrunch window (ctrl-shift-m)
* Please could NCrunch not restart when a project is ignored. Just ignore it from that moment on.

Thanks!







Remco
#2 Posted : Wednesday, February 4, 2026 10:58:17 PM(UTC)
Rank: NCrunch Developer

Groups: Administrators
Joined: 4/16/2011(UTC)
Posts: 7,513

Thanks: 1021 times
Was thanked: 1369 time(s) in 1270 post(s)
Hi, thanks for sharing this.

Not promising anything right now, but I'm hoping I could ask a few things to get a better understanding of your situation.

How many solutions do you use NCrunch on? Are you hopping between many projects very often?

Do you often need to ignore and then unignore specific projects as part of your workflow?

Are the projects you're ignoring unable to build using NCrunch? Or are you doing this for optimisation?

Can you confirm which colour scheme you're using? (grey-on-blue or light-grey-on-blue doesn't sound normal)

Ignoring a project is a serious change under NCrunch. The intention behind this setting is that you'll likely use it when you introduce NCrunch to a solution and then probably never again. An important reason for why it's buried in the configuration is that it's a serious setting that can permanently break the solution if the user doesn't know what they're doing, as ignoring a project will cause any other project depending on it to fail.

My fear is that if it's made more accessible, new users will treat it like the ignored tests feature, then become confused when everything stops working. Normally you shouldn't need to ignore a project unless for some reason NCrunch can't build it. I'm wondering if we're instead looking at a performance issue rather than a UX one?

I'll also add that it should be possible to select multiple projects in the UI and change the setting for all of them at once. This will prevent needing to wait for the engine to restart after each individual change. You can also turn off the engine before changing the settings to prevent it needing to restart while making adjustments.
willdean
#3 Posted : Friday, February 6, 2026 11:40:56 AM(UTC)
Rank: Advanced Member

Groups: Registered
Joined: 1/31/2012(UTC)
Posts: 38
Location: England

Thanks: 8 times
Was thanked: 4 time(s) in 4 post(s)
Remco;18600 wrote:
How many solutions do you use NCrunch on? Are you hopping between many projects very often?


Lots, over time - 20, perhaps?
I probably work on 6-8 regularly.
I have three open in different instances of VS at the moment, 5 would probably be the most.

Remco;18600 wrote:
Do you often need to ignore and then unignore specific projects as part of your workflow?


No, it's mostly about ignoring projects which are never going to be relevant - usually utilities which depend on all the libraries in the solution but which are not themselves unit-tested.

Remco;18600 wrote:
Are the projects you're ignoring unable to build using NCrunch? Or are you doing this for optimisation?


It's optimisation - I don't want to see stuff being buit/copied unnecessairly, and NCrunch seems to unroll dependences somehow, so one can see a lot of copies of the same libraries in the working space - presumably because they're depended on by lots of different components? I'm not complaining about that, but I don't want any of it to happen on behalf of a utility I never wanted NC to bother itself with.

Remco;18600 wrote:
Can you confirm which colour scheme you're using? (grey-on-blue or light-grey-on-blue doesn't sound normal)


I'm not using any colour scheme that I'm aware of. It's possible that it's only the disabled projects that are really grey - maybe the non disabled ones are actually black. The "blue" is a sort of light steel blue - I can't paste an image in here.

Remco;18600 wrote:

Ignoring a project is a serious change under NCrunch. The intention behind this setting is that you'll likely use it when you introduce NCrunch to a solution and then probably never again. An important reason for why it's buried in the configuration is that it's a serious setting that can permanently break the solution if the user doesn't know what they're doing, as ignoring a project will cause any other project depending on it to fail.


That sounds like the effect I want. But the particular solution I'm looking at right now had NCrunch "introduced to it" when you started the company and has been joined at the hip ever since. Since then many, many projects have come and gone (or at least, been unloaded) - many/most of them want to be NCrunched, quite a few don't. There are currently 23 projects in the solution and 7 of them are ignored.

Remco;18600 wrote:

My fear is that if it's made more accessible, new users will treat it like the ignored tests feature, then become confused when everything stops working. Normally you shouldn't need to ignore a project unless for some reason NCrunch can't build it. I'm wondering if we're instead looking at a performance issue rather than a UX one?

I'll also add that it should be possible to select multiple projects in the UI and change the setting for all of them at once. This will prevent needing to wait for the engine to restart after each individual change. You can also turn off the engine before changing the settings to prevent it needing to restart while making adjustments.



The multiple project thing is helpful and I didn't know that, thanks.

But as for if this is a performance problem: I absolutely 100% consider that copying a project and building it when I didn't want it copied or built is a performance disaster. Every single cycle of CPU, byte of cache-washing and sector of disk used in such an activity is 100% wasted, and if my crappy little utility is dependent on an great big tree of libraries it's going to happen over and over and over again as I work on those libraries. If I'm waiting while NC says "build in progress" and I go and look at the activity queue and see a bunch of projects that are irrelevant in there then I want to stop them being built.

But anyway, it's not a big deal, and I have spent more time writing these two posts than I shall ever spend disabling projects, so I cannot advance a very honest argument about wasted time...

Thanks!
Remco
#4 Posted : Saturday, February 7, 2026 12:52:09 AM(UTC)
Rank: NCrunch Developer

Groups: Administrators
Joined: 4/16/2011(UTC)
Posts: 7,513

Thanks: 1021 times
Was thanked: 1369 time(s) in 1270 post(s)
willdean;18611 wrote:

Lots, over time - 20, perhaps?
I probably work on 6-8 regularly.
I have three open in different instances of VS at the moment, 5 would probably be the most.


That's some impressive multi-tasking.

willdean;18611 wrote:

That sounds like the effect I want. But the particular solution I'm looking at right now had NCrunch "introduced to it" when you started the company and has been joined at the hip ever since. Since then many, many projects have come and gone (or at least, been unloaded) - many/most of them want to be NCrunched, quite a few don't. There are currently 23 projects in the solution and 7 of them are ignored.


That's old. It's also a reminder to me about the important of continuing to support older platforms. Do you mind me asking which version of VS you are running?

willdean;18611 wrote:

But as for if this is a performance problem: I absolutely 100% consider that copying a project and building it when I didn't want it copied or built is a performance disaster. Every single cycle of CPU, byte of cache-washing and sector of disk used in such an activity is 100% wasted, and if my crappy little utility is dependent on an great big tree of libraries it's going to happen over and over and over again as I work on those libraries. If I'm waiting while NC says "build in progress" and I go and look at the activity queue and see a bunch of projects that are irrelevant in there then I want to stop them being built.


That's a fair assessment. It's a bit unfortunate that needing to support platform abstractions means NCrunch has to 'churn' up quite a bit of waste, with a lot of files copied. Ideally, the sandbox would be lighter weight, but there's no practical way to implement that without breaking a lot of stuff for everyone.

A few things you might be interested in knowing:
- A project that is never changed will only have one workspace created by NCrunch, so it's only ever copied once. It will also only be built once, unless the 'Copy referenced assemblies to workspace' setting is being used
- Modern SSDs are very fast. Copying files and building workspaces is generally not a serious performance consideration unless they have massive resource files or an absolute ton of code
- However, actually BUILDING such projects can be a massive drain on resources, especially as MS's compiler optimisation goals have moved more towards lots of parallel threads rather than one insanely optimised one
- After the first build run/initialisation, everything always works faster

willdean;18611 wrote:

But anyway, it's not a big deal, and I have spent more time writing these two posts than I shall ever spend disabling projects, so I cannot advance a very honest argument about wasted time...


You didn't directly suggest this, but I don't want you to feel that raising something like this is a waste of time. Unless people open discussions about issues like this, I can remain blind to them. I can't promise the specific change you're after, but you've given me reason to think about your experience here, and I'm grateful for that.

A question that I do have: Is the performance issue bothering you more specific to the initial engine startup? Or to the time the engine takes to report results?
willdean
#5 Posted : Saturday, February 7, 2026 11:50:42 AM(UTC)
Rank: Advanced Member

Groups: Registered
Joined: 1/31/2012(UTC)
Posts: 38
Location: England

Thanks: 8 times
Was thanked: 4 time(s) in 4 post(s)
Remco;18614 wrote:

That's some impressive multi-tasking.


It isn't really, it simply means I have to work evenings and weekends to get any proper work done! I just happen to have worked on several very successful (in their niche) products, and they all need looking after.

Remco;18614 wrote:

That's old. It's also a reminder to me about the important of continuing to support older platforms. Do you mind me asking which version of VS you are running?


VS26 Insiders. I am old and my projects (well, some of them), are old, but my tools are not. I mostly skipped net9 but other than that we always move forward with the framework.

Remco;18614 wrote:

That's a fair assessment. It's a bit unfortunate that needing to support platform abstractions means NCrunch has to 'churn' up quite a bit of waste, with a lot of files copied. Ideally, the sandbox would be lighter weight, but there's no practical way to implement that without breaking a lot of stuff for everyone.


There is no optimisation you can possibly perform that will be better than simple not doing anything with a project, I don't really really feel this should be a point of debate.

Remco;18614 wrote:

A few things you might be interested in knowing:
- A project that is never changed will only have one workspace created by NCrunch, so it's only ever copied once. It will also only be built once, unless the 'Copy referenced assemblies to workspace' setting is being used
- Modern SSDs are very fast. Copying files and building workspaces is generally not a serious performance consideration unless they have massive resource files or an absolute ton of code
- However, actually BUILDING such projects can be a massive drain on resources, especially as MS's compiler optimisation goals have moved more towards lots of parallel threads rather than one insanely optimised one
- After the first build run/initialisation, everything always works faster


Remco;18614 wrote:

A question that I do have: Is the performance issue bothering you more specific to the initial engine startup? Or to the time the engine takes to report results?


I am a busy guy running 5 instances of Visual Studio with Resharper and nCrunch and I buy the fastest, most expensive, computers I can but they run Windows 11. You can be 100% sure that I am in a almost permenant rage about the dreadful performance of all these tools.

But you have now triggered a performance rant, because you say several things which I think hint at why the performance landscape is so terrible on a modern windows box.

* To start gently, I do think it's reasonable for people writing interactive UI to be somewhat cavalier about their users' computer's resources. If you want to take 55ms to respond to a button click rather than 50, then that's fine, and the person who is waiting for you won't notice and won't care.
* All other code effectively runs in the background, and the implied contract between the developer and the user is different, or it should be:
- SSDs are fast, and I bought one because I wanted my computer to be faster, not so that software vendors could spend less effort avoiding disk accesses and thinking (or worse, telling me) it didn't really matter.
- I have lots of memory, but I didn't buy it so that other people can simply waste it.
- I have lots (far too many) of cores of CPU but that doesn't mean people should try and grab them all or stop other people using some of them so that they get a clear run.
- Caching (at every level) is an incredibly important thing for modern processors, but only works if the thing you need is in the cache, and hasn't been washed-out because someone couldn't work out how to make their app sleep until the next weekly firmware update check so they wake up once a second and look at the clock. (This is not a dig at you!)
- My computer is a shared (between software vendors) resource, and I want vendors to behave properly, not each throw their cigarette butts out of the car window and think it doesn't matter because each one is a tiny little bit of cotton and paper.
- To a vendor, his product is the most important thing, but to me it's just a background task which needs to coexist sensibly. Operating system kernels put an enormous amount of effort into that coexistence, but application developers (frequently from the same organisations as the OS) seem hell-bent on subverting that with the biggest land-grab they can make.

But often, it's just laziness or incompetence: at the moment, my PC, which does not have a single IDE open and is basically idle, has an absurd 380 process running on it,and it's doing about 20000 context switches a second, in good part because so many developers have mistaken something being very quick for being something they should do pointlessly over and over again. It seems utterly inescapable - even Zed, which is supposed to be a brand-new on-the-metal high performance editor is doing 250 context switches a second. A backgrounded text editor FFS - would could it possibly be doing other than waiting for a UI event?

When the excellent Bruce Dawson wrote the excellent https://randomascii.word...tage-on-an-idle-laptop/ he said this:

Quote:

1. Don’t poll. Polling wastes CPU time and stops the CPU from dropping deep into power-saving states. WaitForMultipleObjects is your friend.
2. Seriously, don’t poll. I know you think that your program is a special snowflake but polling is just wasteful.


He had to write point 2 because he knows what programmers say when you put point 1 to them.

And if 2016 is too modern, here's one from another 10 years earlier:

https://devblogs.microso...ng/20060124-17/?p=32553

But for "polling" you can substitute "anything which you don't need to do but is just simpler to keep doing anyway", because it all means the same thing in terms of pissing into the public swimming pool.

(I would say that your grid server is very good about not polling when it's idle, so I'll overlook the 2G of RAM it seems to be holding on to :-)

Anyway, I like NCrunch (if not the config dialog) and I admire your tenacity - but you did goad me into the performance stuff :-) As an aside, you may be pleased that I once explained to a group from MS that I wasn't using the VS preview because NCrunch didn't run on it yet, and it didn't run on it yet because you were still massively stinging from a year of being dicked-about by the .net core introduction and couldn't be bothered with playing-along with their time wasting preview process any more. I heard later this has caused quite a reaction internally...

Cheers!













Remco
#6 Posted : Sunday, February 8, 2026 12:32:18 AM(UTC)
Rank: NCrunch Developer

Groups: Administrators
Joined: 4/16/2011(UTC)
Posts: 7,513

Thanks: 1021 times
Was thanked: 1369 time(s) in 1270 post(s)
It's interesting how sometimes the simple questions can bring out the real gold here.

Quote:

VS26 Insiders. I am old and my projects (well, some of them), are old, but my tools are not. I mostly skipped net9 but other than that we always move forward with the framework.


I feel my age now. Right now I'm supporting integration with 8 versions of Visual Studio. Each one feels like a chronicle in itself. With the current changes in technology, I also wonder if the skills I do have are starting to fossilize.

Quote:

There is no optimisation you can possibly perform that will be better than simple not doing anything with a project, I don't really really feel this should be a point of debate.


I cannot argue with this. Not even remotely.

Quote:

But you have now triggered a performance rant, because you say several things which I think hint at why the performance landscape is so terrible on a modern windows box.

* To start gently, I do think it's reasonable for people writing interactive UI to be somewhat cavalier about their users' computer's resources. If you want to take 55ms to respond to a button click rather than 50, then that's fine, and the person who is waiting for you won't notice and won't care.
* All other code effectively runs in the background, and the implied contract between the developer and the user is different, or it should be:
- SSDs are fast, and I bought one because I wanted my computer to be faster, not so that software vendors could spend less effort avoiding disk accesses and thinking (or worse, telling me) it didn't really matter.
- I have lots of memory, but I didn't buy it so that other people can simply waste it.
- I have lots (far too many) of cores of CPU but that doesn't mean people should try and grab them all or stop other people using some of them so that they get a clear run.
- Caching (at every level) is an incredibly important thing for modern processors, but only works if the thing you need is in the cache, and hasn't been washed-out because someone couldn't work out how to make their app sleep until the next weekly firmware update check so they wake up once a second and look at the clock. (This is not a dig at you!)
- My computer is a shared (between software vendors) resource, and I want vendors to behave properly, not each throw their cigarette butts out of the car window and think it doesn't matter because each one is a tiny little bit of cotton and paper.
- To a vendor, his product is the most important thing, but to me it's just a background task which needs to coexist sensibly. Operating system kernels put an enormous amount of effort into that coexistence, but application developers (frequently from the same organisations as the OS) seem hell-bent on subverting that with the biggest land-grab they can make.

But often, it's just laziness or incompetence: at the moment, my PC, which does not have a single IDE open and is basically idle, has an absurd 380 process running on it,and it's doing about 20000 context switches a second, in good part because so many developers have mistaken something being very quick for being something they should do pointlessly over and over again. It seems utterly inescapable - even Zed, which is supposed to be a brand-new on-the-metal high performance editor is doing 250 context switches a second. A backgrounded text editor FFS - would could it possibly be doing other than waiting for a UI event?


I share your pain here. I am appalled at the engineering of much modern software in general, especially in the areas of web development. Reading a website shouldn't consume 300MB of memory.

I've recently performed maintenance on NCrunch's build system, which has been using VMs containing versons of Windows going as far back as Windows XP.

The Windows XP VMs run VS2010 and use only two vCPUs. It's a full pass of a test solution using 4 different frameworks. The VM boots, installs NCrunch, then completes the whole cycle in less than 2 minutes... most of which is actually being spent waiting for the O/S to discover its network connection after it boots.

If I try to allocate less than 8 vCPUs to the newer Win11 VMs, they won't complete the test without hitting the 15 minute timeout. This is after ruthlessly gutting as much unnecessary stuff from the O/S as I possibly can. Minus the integration points, this is the exact same NCrunch code we're talking about.

When it comes to performance, NCrunch's biggest problem is that it sits atop everything. When the build system gets slower and hungrier, so does NCrunch. When .NET processes take longer to spool up, so does NCrunch. When VBCSCompiler runs in the background and keeps a running cache of everything it's touching, NCrunch (as an aggregate) gets fatter.

The addition of so many cores to modern machines has made this so much worse, because instead of optimising their code, devs are just making it more parallel. When trying to do a lot of work in aggregate, the weight of the platform gets so much worse with this kind of design. I don't doubt that the old C++ architecture of the C# compiler was very limiting for the teams at MS, but that thing was really well optimised.

No amount of optimisation can save you from the weight of the platform you sit upon.


Quote:

When the excellent Bruce Dawson wrote the excellent https://randomascii.word...tage-on-an-idle-laptop/ he said this:

1. Don’t poll. Polling wastes CPU time and stops the CPU from dropping deep into power-saving states. WaitForMultipleObjects is your friend.
2. Seriously, don’t poll. I know you think that your program is a special snowflake but polling is just wasteful.

He had to write point 2 because he knows what programmers say when you put point 1 to them.


NCrunch has an interesting history with polling. Some of this is due to my own failings, and some of it is due to lack of integration options and desperate measures.

Early in the project, I simply didn't know about some of the tricks that could be used to avoid it on the Windows system. That was my failing.

Late in the project, the only times it's been used were because a build needed to ship, and the toolset didn't provide any other option. Over time, these have been worked out. To my current knowledge, we don't do any idle polling anymore. There IS still polling for short periods around specific tasks (i.e. the platform is doing this and can't tell us when it's done, check if it's done yet?), but I don't see these as a serious structural issue .. they're just a bit messy.

Quote:

Anyway, I like NCrunch (if not the config dialog) and I admire your tenacity - but you did goad me into the performance stuff :-) As an aside, you may be pleased that I once explained to a group from MS that I wasn't using the VS preview because NCrunch didn't run on it yet, and it didn't run on it yet because you were still massively stinging from a year of being dicked-about by the .net core introduction and couldn't be bothered with playing-along with their time wasting preview process any more. I heard later this has caused quite a reaction internally...


You can probably guess how interesting I find this. I'm not really party to much that goes on inside MS. All I can do is infer things based on their public information and the work that they ship. I have found it rather remarkable how everything has changed (for the better) in previous years... since the introduction of .NET Core, interestingly enough.
willdean
#7 Posted : Sunday, February 8, 2026 10:48:00 AM(UTC)
Rank: Advanced Member

Groups: Registered
Joined: 1/31/2012(UTC)
Posts: 38
Location: England

Thanks: 8 times
Was thanked: 4 time(s) in 4 post(s)
Quote:

The Windows XP VMs run VS2010 and use only two vCPUs. It's a full pass of a test solution using 4 different frameworks. The VM boots, installs NCrunch, then completes the whole cycle in less than 2 minutes... most of which is actually being spent waiting for the O/S to discover its network connection after it boots.


The funny thing about this is that VS2010 was an absolute dog, probably the nadir of the entire VS history. It is a measure of just how bad Windows is nowadays that it can make VS2010 appear in an anecdote about once-great performance.

I agree with you about the cores - there was a great period (at least for those who value multitasking) when we had more cores than individual apps knew how to use. I think the worst laptop I've ever had since the days of single-core machines is a the "22" core one I have now. It just invites build processes to start 22 children each of whom thinks "I'm on a 22 core machine, let's use 22 threads". And before you know where you are you have 22-squared CPU-bound threads doing very little other than context-switching and cache-destruction. And that's just one app. The heterogenous core types make it even more important that the OS deals with this, because no single app has enough information to understand it. Of course the OS product is currently managed by complete morons, so there's little hope there either. I suspect that if the OS lied to every app and told them all they were on a 4 core machine everything would run a lot better.

I see in another thread you're planning to offer some fine-grained threading/CPU control. I predict that will make things worse for most people and you will regret getting involved and wish you'd spent the time on mixed-DPI bugs instead...
willdean
#8 Posted : Sunday, February 8, 2026 10:57:38 AM(UTC)
Rank: Advanced Member

Groups: Registered
Joined: 1/31/2012(UTC)
Posts: 38
Location: England

Thanks: 8 times
Was thanked: 4 time(s) in 4 post(s)
Quote:

supporting integration with 8 versions of Visual Studio.


I cannot understand why you impose this burden on yourself. Why should people running a 10+ year old version of VS expect new features in a plug-in? Just let them download whatever the last version was that supported that version of VS.

I guess this is something to do with your charging model that drives this, but I think I would find it unbearable. Are Microsoft themselves even "supporting" all those versions of VS?
Remco
#9 Posted : Monday, February 9, 2026 12:14:19 AM(UTC)
Rank: NCrunch Developer

Groups: Administrators
Joined: 4/16/2011(UTC)
Posts: 7,513

Thanks: 1021 times
Was thanked: 1369 time(s) in 1270 post(s)
willdean;18620 wrote:
[Quote]
I cannot understand why you impose this burden on yourself. Why should people running a 10+ year old version of VS expect new features in a plug-in? Just let them download whatever the last version was that supported that version of VS.

I guess this is something to do with your charging model that drives this, but I think I would find it unbearable. Are Microsoft themselves even "supporting" all those versions of VS?


Funny you mention that. I'm presently making adjustments to discontinue support for VS versions 2010-2015, because enough is enough.

There are barriers to removing support for old versions of VS, namely in that it involves effort to do it. NCrunch itself has ~26,000 tests, and many of these were written to run on earlier versions of the platform. Most of these tests are still highly relevant, because they examine how the engine behaves under certain conditions, but they still depend on early platforms because at the time they were written, this was the only way to engineer them. So for a full cut, there is a lot of work that needs to be migrated.

I suppose I have the option of just not shipping the installers but keeping the internal integration, but then I receive no benefit from discontinuing support, other than not needing to provide help in this forum for people using older platforms. Since no one using older platforms posts here (because they are so few, and are happy with their situation), there's no advantage to doing this.

So yeah, it's finally happening now. It will make the product lighter and easier to maintain. And as you've stated, earlier versions of NCrunch are still up there and work fine for all those old platforms.
Users browsing this topic
Guest
Forum Jump  
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

YAF | YAF © 2003-2011, Yet Another Forum.NET
This page was generated in 0.144 seconds.
Trial NCrunch
Take NCrunch for a spin
Do your fingers a favour and supercharge your testing workflow
Free Download