Releases: alanmcgovern/monotorrent
v1.0.6
General
- The local listening port is correctly set when sending the extended handshake message. This will improve peer exchange as the correct port is guaranteed to be used.
- Removed unnecessary cloning of Lists when picking pieces. Will greatly reduce memory allocations when a large number of peers are connected.
- Several small tweaks to use the buffer pool instead of instantiating new buffers, primarily around the encrypted connection negotiation code.
- Replaced frequent calls to
Encoding.GetBytes
with static buffers. - Reduced the quantity of BigInteger instances created by the Dht engine.
- Added more thorough testing around
BigEndianBigInteger
and the fallbacks when running under older runtimes not compatible with .NET Standard 2.1. - Updated to the 1.0 release of ReusableTasks
v1.0.5
General
- Bugfix for
TorrentManager.HashCheckAsync (true)
. This will, once again, cause the TorrentManager to enter the Downloading/Seeding mode after the hash check completes. This feature regressed in the 1.0.2 release as part of making the hash check process be paused whenTorrentManager.PauseAsync
is invoked.
v1.0.4
General
- Significant reduction in memory allocations while downloading torrents by replacing
async Task
method declarations withasync ReusableTask
. This is a feature of the https://github.com/alanmcgovern/ReusableTasks project, which is also available on NuGet https://www.nuget.org/packages/ReusableTasks. - The
IConnection
interface has been superseded byIConnection2
. The only difference is that the three main methods, ConnectAsync, SendAsync and ReceiveAsync are now typed asReusableTask
instead ofTask
. If anyone is implementing their own IConnection it is strongly recommended to use IConnection2 so that theReusableTask
variants of the three methods can be used instead of theTask
variants. However, connections which implementIConnection
are still fully supported - Migrated to System.Numeric.BigInteger instead of an old imported copy of Mono's BigInteger class. The System.Numeric version is significantly more performant than then decade old version from Mono.
- Small tweak to how peers connection retries operate. If a connection could be established and an encrypted handshake fails, we immediately retry with an unencrypted handshake, and vice versa. This means connectable peers will have both methods checked immediately, increasing the chance of an active connection being established quickly. Previously the peer would be added to the end of the list and would be retried a long time after the initial attempt.
Performance Data
This screenshot shows the total allocated objects throughout the lifetime of a session which downloaded two torrents, totalling 3.2GB of data. The latest round of optimisations drastically reduced the allocations to 60MB in total.
v1.0.3
General
A new feature called 'Partial Hash Checking' has been introduced. This allows files which are marked with priority DoNotDownload
to be excluded from hash checking and also excluded from downloading. The result is that if there is a torrent file with 1000s of files and only a handful are actually going to be downloaded, the hashcheck is restricted to just those parts of the torrent, and only those pieces will be downloaded.
In addition a new property has been added, TorrentManager.PartialProgress
. This is the same as the pre-existing Progress
property, except it only counts the progress for the files which are not marked as 'DoNotDownload'. For example if 50% of the files are marked as DoNotDownload (and those files represent 50% of the overall data) then the final property values will be PartialProgress = 100.0
and Progress = 50.0
when the remaining files are fully downloaded.
Once PartialProgress
reaches 100 then the mode will change to Seeding
to indicate that no further pieces will be requested. If files are then moved to Priority.Normal
then PartialProgress will change to a smaller value, the Mode will change to Downloading, the new pieces will be hashchecked and any missing pieces will be requested.
v1.0.2
General
- Made
PiecePicker.BasePicker
public to make it easier for developers to interact with the chain of PiecePickers. - Fixed several issues with rate limiting. The per-torrent and overall upload/download limits should be fully functional now.
- Made
EngineSettings.PrefersEncryption
default to true, as the documentation described. DhtEngine
no longer throws a NullReferenceException ifnull
is passed in for the initial nodes.- Hashing can now be paused/resumed by calling
PauseAsync
andStartAsync
respectively.
v1.0.1
General
- Patch from @borigas to remove the seed from the Random generator used to generate the PeerID. The existence of the seed meant that if you restarted your client you'd generate the same sequence again, but every ClientEngine created within a single process would be unique. Ideally the sequences should not repeat when restarting the engine. This was a recent regression.
v1.0.0
General
- No real change from the previous release, other than to make this a 1.0 stable release.
v0.99.136
General
- Another API break was introduced in order to move SpeedMonitor to a 64-bit
long
instead of a 32-bitint
in all public API. This allows it to represent speeds/rates in excess of 2GB/sec. It also fixed an issue where much lower speeds could overflow the internal int32 calculations when working out the average speed.
v0.99.134
General
- This should be the last API break for the forseeable future.
ClientSettings
andTorrentSettings
no longer have multiple constructor overloads. All the properties are public get/set so just use object initializer syntax to set the properties you want. All properties are documented.- Re-namespaced EncryptionTypes.
- The C# compiler used must support the C# 7.2 language spec. This means, i believe, any recent release of Visual Studio 2017, 2019 or Visual Studio Mac will be fine.
- Updated the TrackerServer to expose
ITrackerItem
instead ofSimpleTorrentManager
. The latter has been made an internal class. - Contribution from @justscribe to add some helpful API points to
TrackerServer
.
Packaging
- Xml Documentation is now bundled in the nuget so you should get intellisense now.
- Now classified as a beta release!
v0.99.119
General
- Some minor cleanups internally.
- Improvements to some tests.
- Updated the packaging step to allow easier generation of alpha/beta releases. As part of this the 'alpha.txt' file has been committed to the repository to signify this releases are alpha level, due to the recurring API/ABI breaks.
NuGet.org
- These releases are now being shipped on NuGet, under the MonoTorrent package name.