【发布时间】:2019-03-14 10:28:03
【问题描述】:
考虑以下几点:
using (var fs = new StreamReader(filepath))
{
while (!fs.EndOfStream)
{
string line = fs.ReadLine();
}
}
如果文件路径是一个包含很长字符行的文件(换行符之间有很多字符),它可能会导致服务器在其中一个 ReadLine() 调用中耗尽内存。这是一个潜在的拒绝服务向量。
是否有任何 C# 类可以缓解此问题?我正在创建一个继承 StreamReader 并使用 StreamReader.ReadBlock() 方法来读取有限的字符块的新类,但是我必须通过换行来处理块的解析,以便能够从文件中返回行。如果存在,我想使用一些框架类来做同样的事情。
【问题讨论】:
-
1.真正的问题应该出在其他地方(使用这些行的地方)。 2.尝试移动for循环的字符串行out的类型定义。
-
这样一行你想做什么?抛出异常,分块读取,截断?
-
典型的文件大小是多少?
-
问题取决于行长和内存大小。
标签: c# out-of-memory streamreader denial-of-service