monotorrent-writeRate / readRate不起作用

时间:2018-08-02 12:55:48

标签: c# winforms monotorrent

我正在使用monotorrent下载20GB〜文件,当monotorrent创建文件时,内存和CPU达到最大值,这会减慢计算机甚至使其过热,因此我想通过限制写入速率来限制内存使用量。< / p>

这是我尝试过的方法:-

,我检查了一下,发现可以使用以下代码限制引擎的读/写速率:-

EngineSettings engineSettings = new EngineSettings(downloadsPath, port);
                engineSettings.PreferEncryption = true;
                engineSettings.AllowedEncryption = EncryptionTypes.All;
                engineSettings.MaxWriteRate = **maximum write rate in bytes**;
                engineSettings.MaxReadRate = **maximum read rate in bytes**;
                engineSettings.GlobalMaxDownloadSpeed = **max download in bytes**;

下载速率有效,但它没有限制内存使用,因此我使用此代码在运行时检查了写入速率值

 MessageBox.Show(engine.DiskManager.WriteRate.ToString());

,它返回了0,所以我没有将MaxWriteRate添加到EngineSettings中,而是进入EngineSettings.cs并通过更改此设置为MaxWriteRate添加了默认值代码:-

public int MaxWriteRate
        {
            get { return 5000; }
            set { maxWriteRate = 5000; }
        }

它并没有限制内存使用,而且WriteRate的值返回了0,所以我进入DiskManager.cs并通过更改以下代码向WriteRate添加了默认值:-< / p>

public int WriteRate
        {
            get { return 5000; }
        }

现在WriteRate的值返回了5000,但它没有限制内存的使用,然后我卡住了,没有发现其他要更改的地方,

有人知道为什么它不起作用吗?我在想WriteRate甚至不是在限制写入速度。

1 个答案:

答案 0 :(得分:0)

下载torrent时,下载速度受以下三点限制:

1)TorrentManager允许的最大下载速度 2)整体上允许的最大下载速度 3)等待写入磁盘时,内存中保存的数据不超过4MB。

特别是在第三点,如果内存中保存的内存超过4MB,则不会再进行Socket.Receive调用将在刷新数据之前进行。 https://github.com/mono/monotorrent/blob/caac16cffd95749febe04c3f7cf22567c3e40432/src/MonoTorrent/MonoTorrent.Client/RateLimiters/DiskWriterLimiter.cs#L43-L46

此屏幕截图显示了当您将最大写入速率指定为2 * 1024 * 1024(2,048 kB / sec)时今天会发生什么: enter image description here

下载速度会自动限制,因为4MB缓冲区已满,这意味着设置最大磁盘写入速度最终会限制下载速度和内存消耗。