gpt4 book ai didi

c# - 当您在处理大数据集之前收集大量数据时,提高内存使用率的最佳方法是什么? (。网)

转载 作者:太空狗 更新时间:2023-10-29 23:57:55 27 4
gpt4 key购买 nike

当我必须获取数 GB 的数据,将其保存在一个集合中并进行处理时,我遇到了内存溢出。所以不是:

 public class Program
{
public IEnumerable<SomeClass> GetObjects()
{
var list = new List<SomeClass>();
while( // get implementation
list.Add(object);
}
return list;
}

public void ProcessObjects(IEnumerable<SomeClass> objects)
{
foreach(var object in objects)
// process implementation
}

void Main()
{
var objects = GetObjects();
ProcessObjects(objects);
}
}

我需要:

 public class Program
{
void ProcessObject(SomeClass object)
{
// process implementation
}

public void GetAndProcessObjects()
{
var list = new List<SomeClass>();
while( // get implementation
Process(object);
}
return list;
}

void Main()
{
var objects = GetAndProcessObjects();
}
}

有更好的方法吗?

最佳答案

您应该利用 C# 的 iterator blocks并使用 yield return 语句执行如下操作:

 public class Program
{
public IEnumerable<SomeClass> GetObjects()
{
while( // get implementation
yield return object;
}
}

public void ProcessObjects(IEnumerable<SomeClass> objects)
{
foreach(var object in objects)
// process implementation
}

void Main()
{
var objects = GetObjects();
ProcessObjects(objects);
}
}

这将允许您流式传输每个对象而不是将整个序列保存在内存中 - 您一次只需要将一个对象保存在内存中。

关于c# - 当您在处理大数据集之前收集大量数据时,提高内存使用率的最佳方法是什么? (。网),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1034266/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com