C# 创建多个短期对象
如果变量@count小于10,那么向流中写入零数组的哪种方式(从整体性能来看)更可取?我担心第一种方法中分配器和垃圾收集器的负载过大。另一方面,在.net中创建短期对象应该进行大量优化C# 创建多个短期对象,c#,.net,performance,C#,.net,Performance,如果变量@count小于10,那么向流中写入零数组的哪种方式(从整体性能来看)更可取?我担心第一种方法中分配器和垃圾收集器的负载过大。另一方面,在.net中创建短期对象应该进行大量优化 void Main() { using(var ms = new MemoryStream()){ Method1(ms, 5); Method2(ms, 5); } } void Method1(MemoryStream ms, int count){
void Main()
{
using(var ms = new MemoryStream()){
Method1(ms, 5);
Method2(ms, 5);
}
}
void Method1(MemoryStream ms, int count){
ms.Write(new byte[count], 0, count);
}
static byte[] PreallocatedBuffer = new byte[1024];
void Method2(MemoryStream ms, int count){
ms.Write(PreallocatedBuffer, 0, count);
}
在某些情况下,您可以调用垃圾回收。本文很好地描述了这些
如果有很多对象突然(而不是周期性地)变得无用(例如:关闭一个大文件),那么手动调用垃圾收集似乎不是一个坏主意在某些情况下,您可以调用垃圾收集。本文很好地描述了这些
如果有很多对象突然(而不是周期性地)变得无用(例如:关闭一个大文件),那么手动调用垃圾收集似乎不是一个坏主意,我消除了所有的瓶颈,但是程序有很多永久内存分配,我无法确切说出问题出在哪里。我不知道剖析的艺术,做合成测试是毫无意义的。因此,我感兴趣的是了解具有大量内存分配的dotnet中的一般状态。谢谢你的链接,这对我很有用。”我不能确切地说问题出在哪里“我还没有看到任何问题。在不猜测性能的情况下,以下内容也会起作用:
ms.Position=4;ms.WriteByte(0)代码>我不确定它在多大程度上支持功能。(如果不是从0开始,Position也可以与+=
一起使用。例如ms.Position+=count-1;
)@me name,很好,谢谢!,我消除了所有的瓶颈,但是程序有很多永久内存分配,我不能确切地说问题出在哪里。我不知道剖析的艺术,做合成测试是毫无意义的。因此,我感兴趣的是了解具有大量内存分配的dotnet中的一般状态。谢谢你的链接,这对我很有用。”我不能确切地说问题出在哪里“我还没有看到任何问题。在不猜测性能的情况下,以下内容也会起作用:ms.Position=4;ms.WriteByte(0)代码>我不确定它在多大程度上支持功能。(如果不是从0开始,Position也可以与+=
一起使用。例如ms.Position+=count-1;
)@me name,很好,谢谢!