Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在没有任何其他引用的情况下删除列表项_C# - Fatal编程技术网

C# 在没有任何其他引用的情况下删除列表项

C# 在没有任何其他引用的情况下删除列表项,c#,C#,我有一个对象列表,多个用户可以从Web服务访问这些对象。但是,列表中的对象数量正在稳步增长,因此我需要一些内存管理。 我想从列表中清除所有未被任何用户使用的元素。但是,我不能简单地通过调用GC来实现这一点,因为仍然有一个引用(列表中的引用)。我不知道,如何得到一个对象的引用数 那么,有没有一种方法,如何清除只有一个引用的所有对象?或者获取参考文献的数量?或者确定列表之外是否没有其他参考?欢迎任何解决方案。您可以使用所谓的弱列表 基本上,弱列表是指其引用被GC“忽略”的列表。因此,尽管列表中仍有引

我有一个对象列表,多个用户可以从Web服务访问这些对象。但是,列表中的对象数量正在稳步增长,因此我需要一些内存管理。 我想从列表中清除所有未被任何用户使用的元素。但是,我不能简单地通过调用GC来实现这一点,因为仍然有一个引用(列表中的引用)。我不知道,如何得到一个对象的引用数


那么,有没有一种方法,如何清除只有一个引用的所有对象?或者获取参考文献的数量?或者确定列表之外是否没有其他参考?欢迎任何解决方案。

您可以使用所谓的弱列表

基本上,弱列表是指其引用被GC“忽略”的列表。因此,尽管列表中仍有引用,但它不会被计算,并且(取决于您使用的弱列表的哪个实现)该项将在列表中的某一点自动删除

不幸的是,在.NET框架中没有直接实现弱列表。有一些想法你可以像列表一样使用,还有一些例子是web上使用
WeakReference
类型或类似机制的弱列表

示例:


如果您试图从列表中删除某个项目,则该项目将是您的列表。删除(ITEEM)。这就是您正在搜索的内容吗?您为什么不使用任何框架缓存解决方案?套用Raymond Chen的话说,具有错误保留策略的缓存只是内存泄漏的另一个名称。如果您将其作为对web请求的响应返回,则整个应用程序域中根本不会使用该项;它被一个完全不同的进程使用,如果不是一个完全不同的物理机器的话。为什么不使用其他更适合您需要的数据结构呢。隐藏物哈希集?字典?似乎应该以线程安全的方式交换列表:Interlocked.Exchange(ref currentList,newList);一位朋友建议创建一个列表,存储WeakReference(myObject,true)…这样做行吗?不完全行。虽然这会清理对象值,但WeakReferences本身仍有一个小内存泄漏。因此,您需要定期检查某些WeakReference条目是否已失效,并将其从列表中删除。您在web上找到的一些解决方案正是这样做的(“修剪”)