【发布时间】:2014-06-29 00:56:16
【问题描述】:
我正在制作一个服务器,我注意到它有一点奇怪的内存泄漏。在我的服务器上,我将一个 IP 地址可以建立的总连接数限制为 8。这非常有效。
但是,当我使用 LOIC 对我的服务器进行 DoS 攻击时,我注意到虽然它只创建了网络类的 8 个实例,但 StreamReader 的 ReadLine 方法占用了很大一部分内存。
我已经使用 Console.WriteLine 验证了实际上没有收到任何数据,它只是在该方法处等待。内存增加并填满了我的整个 16GB。
请注意,这个类的实例只有 8 个来自一个 IP,而且由于我是 DoS 攻击而不是 DDoS 攻击,它只来自我的 IP(我已经验证了这一点)。
这个问题的原因是什么,我该如何解决?
编辑:
相关代码为:
string data;
Dictionary<string, string> variables = null;
try {
while (_listen) {
data = null;
while ((data = _reader.ReadLine()) != null) {
【问题讨论】:
-
如果您不发送换行符 (
\r\n),那么该行将不断增加 -
@LucasTrzesniewski 我不选择发送的内容。这是我对我的服务器运行的 DoS 攻击。
-
我知道,这只是解释为什么这个东西会消耗内存。我的意思是如果你关心 DoS 攻击,你不应该使用
ReadLine。 -
嗯,好的,谢谢。你会推荐什么?
-
我会写一个答案。
标签: c# memory tcpclient tcplistener