首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rx.Net内存泄漏

Rx.Net内存泄漏
EN

Stack Overflow用户
提问于 2020-03-20 01:39:40
回答 1查看 237关注 0票数 0

一个有趣的内存泄漏。有人知道为什么吗?

代码语言:javascript
复制
foreach (int x in Enumerable.Range(0, 1_000_000)
    .Select(async i => i))
{
}

GC.Collect();
Console.WriteLine(GC.GetTotalAllocatedBytes()); // 1036542160

foreach (int x in Enumerable.Range(0, 1_000_000)
    .Select(async i => i))
{
}

GC.Collect();
Console.WriteLine(GC.GetTotalAllocatedBytes()); // 2072860704

foreach (int x in Enumerable.Range(0, 1_000_000)
    .Select(async i => i))
{
}

GC.Collect();
Console.WriteLine(GC.GetTotalAllocatedBytes()); // 3109160008

其中:

代码语言:javascript
复制
static class SelectAsync
{
    public static IEnumerable<TResult> Select<T, TResult>(
        this IEnumerable<T> source, Func<T, Task<TResult>> selector) =>
        source
            .ToObservable()
            .Select(value => Observable.FromAsync(() => selector(value)))
            .Concat()
            .ToEnumerable();        
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-20 01:59:22

实际上没有内存泄漏。

GC.GetTotalAllocatedBytes是在进程的生命周期内分配的字节数。每次有堆分配时,这个计数器就会上升。

您想要使用的是GC.GetTotalMemory

如果您看到测试值之间的差值,您将看到它们大致相同。

您将在测试中看到一些与内存压力相关的细微变化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60762407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档