Mpdreamz / shellprogressbar

ShellProgressBar - display progress in your console application
MIT License
1.43k stars 134 forks source link

Performance improvements #28

Closed dlech closed 5 years ago

dlech commented 5 years ago

Apparently, the use of Console.CursorTop and Console.CursorLeft is very expensive on .NET Core 2.1 on Linux. As in "I left the demo program running for 12 hours and it was still on 0% overall progress" kind of expensive.

This changes ProgressBar to keep track of the cursor position internally instead of using the Console.CursorTop getter. Also, calls to the setters of Console.CursorTop and Console.CursorLeft are replaced with Console.SetCursorPosition() which has much better performance.

The demo program can now run in seconds instead of days.

dlech commented 5 years ago

FYI, this will cause a merge conflict with #27, so if you want to take both, let me know and I will rebase one or the other.

Mpdreamz commented 5 years ago

@dlech FYI I've rebased this PR against master and fixed the conflicts and forced pushed to your branch.

Many many thanks again for all the PR's @dlech!

I will do my due diligence and test master against OSX linux and Windows (WSL, CMD, PowerShell) tonight and push all of these improvements to Nuget 😄

Mpdreamz commented 5 years ago

https://www.nuget.org/packages/ShellProgressBar/4.1.1 is out with these fixes 💯