相关疑难解决方法(0)

为什么Roslyn中有如此多的对象池实现?

ObjectPool的是在罗斯林C#编译器用于重复使用,这通常得到new'ed起来,垃圾收集经常经常使用的对象类型.这减少了必须发生的垃圾收集操作的数量和大小.

Roslyn编译器似乎有几个单独的对象池,每个池有不同的大小.我想知道为什么有这么多的实现,首选的实现是什么,以及为什么他们选择了20,100或128的池大小.

1 - SharedPools - 如果使用BigDefault,则存储20个对象的池或100个.这个也很奇怪,因为它创建了一个PooledObject的新实例,当我们尝试汇集对象而不创建和销毁新对象时这没有任何意义.

// Example 1 - In a using statement, so the object gets freed at the end.
using (PooledObject<Foo> pooledObject = SharedPools.Default<List<Foo>>().GetPooledObject())
{
    // Do something with pooledObject.Object
}

// Example 2 - No using statement so you need to be sure no exceptions are not thrown.
List<Foo> list = SharedPools.Default<List<Foo>>().AllocateAndClear();
// Do something with list
SharedPools.Default<List<Foo>>().Free(list);

// Example 3 - I have also seen this variation of the above pattern, which …
Run Code Online (Sandbox Code Playgroud)

.net c# garbage-collection roslyn

33
推荐指数
1
解决办法
4639
查看次数

.NET中已存在ObjectPool <T>或类似内容?

我不想写自己的,因为我担心我可能会遗漏某些东西和/或扯掉其他人的工作,那么.NET库中是否存在ObjectPool(或类似)类?

对象池,我指的是一个帮助缓存需要很长时间才能创建的对象的类,通常用于提高性能.

.net c#

14
推荐指数
2
解决办法
1万
查看次数

C# - 垃圾收集

好的,所以我理解堆栈和堆(堆栈上的值,堆上的引用).

当我声明一个类的新实例时,它会存在于堆上,并在堆栈的内存中引用此点.我也知道C#是自己的垃圾收集(即它确定何时不再使用实例化的类并回收内存).

我有两个问题:

  1. 我对垃圾收集的理解是否正确?
  2. 我可以自己做吗?如果是这样,我自己做这件事有什么好处,或者我应该离开它.

我问,因为我在For循环中有一个方法.每次循环时,我都会创建一个新类的实例.在我的脑海中,我把所有这些课程都放在一堆,没有做任何事情,只是占用记忆,我想尽快摆脱它们以保持整洁!

我是正确理解这个还是我错过了什么?

c# heap stack

12
推荐指数
3
解决办法
2万
查看次数

如何在C#中实现可重用的对象池?

我正在处理流式套接字上的大量数据.使用数据并留给GC进行清理.我想预先分配一个可重用的池并重复使用它来防止大量的GC.

谁能帮我?

c# object-pooling

4
推荐指数
1
解决办法
1524
查看次数

标签 统计

c# ×4

.net ×2

garbage-collection ×1

heap ×1

object-pooling ×1

roslyn ×1

stack ×1