草庐IT

塑料回收

全部标签

c# - 如何在 .NET 4.x 中强制进行完全垃圾回收?

我对.NET4.x中的WeakReferences有疑问,我正在运行测试以确保不再引用某些对象(使用Wea​​kReferences),我注意到该行为在框架版本之间不一致:usingSystem;usingSystem.Text;usingNUnit.Framework;[TestFixture]publicclassWeakReferenceTests{[Test]publicvoidTestWeakReferenceIsDisposed(){WeakReferenceweakRef=newWeakReference(newStringBuilder("Hello"));GC.Col

c# - 防止对非托管代码中使用的托管引用进行垃圾回收

我的C#应用程序使用包装的C++代码进行计算。C++header:__declspec(dllexport)voidSetVolume(BYTE*data,unsignedintwidth);C++/CLI包装器:voidSetVolume(array^data,UInt32width){cli::pin_ptrpdata=&data[0];pal->SetVolume(pdata,width);}C#:publicstartCalc(){byte[]voxelArr=File.ReadAllBytes("Filtered.rec");palw.SetVolume(voxelArr,4

c# - 抑制 C# 垃圾回收

我的应用程序分配了大量内存(数百万个小对象,总计几千兆字节)并保留了很长时间。.NET是否在浪费时间检查所有这些数据以对其进行GC?第2代GC(检查所有对象)多久发生一次?有什么方法可以降低它的频率或暂时抑制它的发生吗?我确切地知道什么时候我准备好收集大量内存,有什么方法可以优化它吗?我目前正在调用GC.Collect();GC.WaitForPendingFinalizers();那时。更新:性能计数器“GC时间百分比”显示平均为10.6%。 最佳答案 除非您可以确认垃圾收集器正在主动降低应用程序的性能,否则您不应采取措施削弱运行

c# - 回收 ListView 中这个看不见的、吞噬性能的单元格是什么?

所以我在使用ListView的Xamarin.Forms应用程序(在Android上)中遇到了性能问题。原因是,因为我在ListView的ItemTemplate中使用了一个非常复杂的自定义控件。为了提高性能,我在自定义控件中实现了很多缓存功能,并将ListView的CachingStrategy设置为RecycleElement。性能并没有变得更好。所以我深入挖掘,试图找出原因。我终于注意到了一些非常奇怪的错误,并将其隔离在一个新的空应用程序中。代码如下:主页.xaml测试控件.cspublicclassTestControl:Grid{staticintid=0;intmyid;p

c# - 在静态类中声明的对象何时会被垃圾回收?

publicstaticclassstClass{staticClass1obj=newClass1();publicstaticintreturnSomething(){return0;}}如果我正在调用静态函数stClass.returnSomething()在其他一些非静态类中?注意:Class1不是静态的 最佳答案 从不,如obj不执行IDisposable.如果你的意思是什么时候obj获得垃圾收集那么答案仍然是永远不会-静态字段永远不会被垃圾收集,因此obj的对象如果您设置obj,引用将仅符合垃圾收集条件为空(或其他一些对

C# - 垃圾回收

好的,我了解了栈和堆(值存在于栈中,引用存在于堆中)。当我声明一个类的新实例时,它位于堆上,并在堆栈上引用内存中的这一点。我也知道C#有它自己的垃圾收集器(即它确定实例化类何时不再使用并回收内存)。我有两个问题:我对垃圾收集的理解是否正确?我可以自己做吗?如果是的话,我自己这样做有什么真正的好处,还是我应该放弃它。我问是因为我在For循环中有一个方法。每次我经历一个循环时,我都会创建我的类的一个新实例。在我的脑海中,我想象所有这些类都堆成一堆,除了占用内存之外什么都不做,我想尽快摆脱它们以保持整洁!我理解正确还是我遗漏了什么? 最佳答案

c# - 如何使用 C# 从回收站恢复文件?

将文件移动到回收站和清空回收站都有详细记录,但如何以编程方式从回收站恢复文件? 最佳答案 在纯C#中似乎没有解决方案。您很可能不得不求助于P/Invoke。Thisarticle使用SHFileOperation在C++中提供解决方案API。 关于c#-如何使用C#从回收站恢复文件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/911391/

c# - 在 Mono 中触发垃圾回收

如何让Mono中的垃圾收集器做任何有用的事情?这篇文章的底部是一个生成两个大字符串的简单C#测试程序。生成第一个字符串后,取消引用变量,退出作用域,并手动触发垃圾收集器。尽管如此,使用的内存并没有减少,并且在构造第二个字符串期间程序因内存不足异常而爆炸。UnhandledException:OutOfMemoryException[ERROR]FATALUNHANDLEDEXCEPTION:System.OutOfMemoryException:Outofmemoryat(wrappermanaged-to-native)string:InternalAllocateStr(int)a

c# - 垃圾回收是如何收集自引用对象的?

如果某个对象未被任何其他对象引用,则它会被.NETCLR垃圾收集器收集。但是,如果objA引用objB,objB引用objC,而objC对objA的引用,垃圾收集器如何确定它们(作为一个整体)可以被收集? 最佳答案 CLR使用一种称为标记清除的技术。作为这项技术的一部分,每个对象都可以被认为是最初标记为收集的。然后,CLR遍历每个可访问对象,从您的全局变量(静态字段等)作为根开始,并清除每个可遍历对象上的标记。然后它会扫除剩余的标记对象。请记住,此“标记”是概念性的;实际上,对象很可能被添加到一个集合集中。在循环自引用对象的情况下,

c# - 我怎么知道一个目录是C#中的回收站?

给定一个文件夹,我如何判断它是一个回收站?我找到了一个answer适用于C++但不适用于C#。我的第一个想法是检查FileAttributes.System(在我的情况下这是一个可接受的近似值),但实际上该标志在回收文件夹中被清除。使用硬编码文件夹名称的原始解决方案是不可能的(我们毕竟是2009年)。 最佳答案 这里有个小问题。Windows回收站是一个虚拟文件夹,实际上并不存在。您看到的文件实际上并不在该文件夹中,它们是磁盘上已重命名为特殊名称的现有文件的表示,这会将它们从可见文件系统中“删除”,但不会从物理文件系统中删除。您可以