我有以下代码的问题。我在 GetDB 函数中创建了一个内存流,并在using块中使用了返回值。出于某种未知原因,如果我转储对象,我会看到 MemoryStream 仍在 Main 方法的末尾。这导致我大量泄漏。知道如何清理这个缓冲区吗?
我实际上已经检查过是否已在 MemoryStream 上调用了 Dispose 方法,但该对象似乎仍然存在,为此我使用了 Visual Studio 2017 的诊断工具。
class Program
{
static void Main(string[] args)
{
List<CsvProduct> products;
using (var s = GetDb())
{
products = Utf8Json.JsonSerializer.Deserialize<List<CsvProduct>>(s).ToList();
}
}
public static Stream GetDb()
{
var filepath = Path.Combine("c:/users/tom/Downloads", "productdb.zip");
using (var archive = ZipFile.OpenRead(filepath))
{
var data = archive.Entries.Single(e => e.FullName == "productdb.json");
using (var s = data.Open())
{
var ms = new MemoryStream();
s.CopyTo(ms);
ms.Seek(0, SeekOrigin.Begin);
return (Stream)ms;
}
}
}
}
月关宝盒
相关分类