0

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

这是我尝试过的:-

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

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,而是通过更改此代码添加了一个默认值:-MaxWriteRateEngineSettingsEngineSettings.csMaxWriteRate

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

并且它并没有限制内存使用量,返回的值也为0,所以我通过更改此代码WriteRate进入DiskManager.cs并添加了一个默认值:-WriteRate

public int WriteRate
        {
            get { return 5000; }
        }

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

有谁知道为什么它不工作?我认为这WriteRate甚至与限制写作速度无关。

4

1 回答 1

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) 时今天发生的情况: 在此处输入图像描述

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

于 2019-05-09T15:56:10.353 回答