Home Blog Performance Improvements
 

Performance Improvements

We just released ISESteroids 2.0.13.6, and I’d like to give you a bit of an overview what we have been working on.

Performance Issues

ISESteroids generally is super fast. But we received some reports where it was not. Actually, in some cases, there was a lag of a couple of seconds after each new character. Obviously, that’s not what it should be, so we investigated.

There are typically two areas of performance degradation in .NET applications:

  • Immediate degradation, possibly reversible: This occurs with exceptions that have not been handled. We did find an issue and resolved it.
  • Degradation over time: This is a gradual process, and the application becomes slower and slower. It is caused by memory leaks and hogging resources. To explain this (and some remedies), I need to explain a bit below.

Resource Management

Even the original ISE editor won’t free all resources tied to an editor window that you close. We added a number of mechanisms to improve this, so when you open a bunch of scripts and close them again, ISESteroids should actually perform better than the original ISE.

However, when you start to play with all the new bells and whistles (like ScriptMap, CloneView, SplitView, etc), then over time there is a chance that resources won’t be freed to an extend where the application slows down.

New Restart ISE Feature

Restarting ISE (+ open Documents) to Free Resources and Clean Environment

That’s why we now have a dual strategy: we further improve and optimize memory management, and we added a new toolbar button to the secondary toolbar. It is located to the right, and looks like a dotted circle. When you click it, ISESteroids persists your current files (saved and untitled files, including collapse state and breakpoints as well as cursor position and scroll state), and starts a new and fresh ISE.

As soon as ISESteroids are reloaded, they pick up the persisted files, and restore your environment. So obviously, this works best when you launch ISESteroids from your profile, so it is automatically reloaded.

That’s an easy way of freeing all resources after a couple of hours of intense coding, and it also is great to continue work in a fresh environment, for example, to test-drive the final version of your work.

You can also hold CTRL while clicking the button: ISESteroids will then persist your environment and close down. So now it is up to you when you are ready to relaunch – maybe tomorrow or next week. When you do, your environment reloads from the persisted data. So you can close the ISE even if you are in the middle of something big, and get back to it when you are ready.

Right now, the new “Restart ISE” functionality works best when only one Tab is open. While ISESteroids persists multiple TABs as well, there are still some unresolved issues with rehydrating the persisted data, like how to deal with remote PowerShell tabs.

More Complete Theming

Theming was further improved as well. So starting in this release, you now can even change and adjust the squiggle colors. To do that, right-click any piece of code in the editor, then choose “Theme”/”Squiggle”. Note that the “Theme” submenu is visible only when you enabled “Enable Theme Adjustment” in the Theme menu. It opens when you click the 3-circle-colors-button in the secondary tool bar.

Creating EXEs from Scripts

Some may not even have seen the “Create Application” wizard in the “Tools” menu. It turns your script code into an EXE file and lets you even choose a custom icon for it. In previous releases, there was an issue when the EXE was cancelled. This should be resolved now.

Some Additional Notes

ISESteroids is a work in progress. As you can see, your suggestions and bug reports are taken seriously, and we are trying the very best to address them all as quickly as possible. That said, you will find some areas in ISESteroids that are not yet complete. In the “Tools” menu, there is going to be a .NET Explorer soon. While you can see the command in the menu already, it is not yet functional.

 

Best regards,

Tobias