monotorrent - writeRate/readRate 不工作
Posted
技术标签:
【中文标题】monotorrent - writeRate/readRate 不工作【英文标题】:monotorrent - writeRate/readRate not working 【发布时间】:2018-08-02 12:55:47 【问题描述】:我正在使用下载 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
,因此我没有将MaxWriteRate
添加到EngineSettings
,而是进入EngineSettings.cs
,并通过更改此代码为MaxWriteRate
添加了一个默认值:-
public int MaxWriteRate
get return 5000;
set maxWriteRate = 5000;
它并没有限制内存使用,WriteRate
值也返回 0,所以我进入DiskManager.cs
并通过更改此代码为WriteRate
添加默认值:-
public int WriteRate
get return 5000;
现在WriteRate
的值返回 5000,但它并没有限制内存使用量,然后我卡住了,没有发现其他需要更改的地方,
有谁知道为什么它不起作用?我在想WriteRate
甚至不是为了限制写入速度。
【问题讨论】:
【参考方案1】:下载种子时,下载速度受三个方面的限制:
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/秒) 时今天发生的情况:
下载速率自动限制,因为 4MB 缓冲区已满,这意味着设置最大磁盘写入速率最终会限制下载速率和内存消耗。
【讨论】:
以上是关于monotorrent - writeRate/readRate 不工作的主要内容,如果未能解决你的问题,请参考以下文章