草庐IT

垃圾箱

全部标签

c# - 未执行 C# 中的垃圾收集。为什么?

我尝试了一个简单的实验来验证垃圾收集器的功能。引用3.9Automaticmemorymanagement(MSDN)关于.NET中的自动内存管理.对我来说,这听起来像是C++中的共享指针。如果一个对象的引用计数器变为零,它将被垃圾收集器释放。所以我尝试在我的主窗体中创建一个函数。该函数是在构造函数之后执行的主窗体的Shown事件函数中调用的。下面是实验代码。publicvoidexperiment(){int[]a=newint[100000];int[]b=newint[100000];int[]c=newint[100000];int[]d=newint[100000];a=nu

c# - 在C#中监视垃圾收集器

我有一个WPF应用程序,遇到很多性能问题。最糟糕的是,有时应用程序会冻结几秒钟,然后再次运行。我目前正在调试该应用程序,以查看此冻结可能与之相关,并且我认为可能导致此冻结的原因之一是垃圾收集器。由于我的应用程序在非常有限的环境中运行,因此我相信垃圾收集器在运行时可以使用机器的所有资源,而不会将任何资源留给我们的应用程序。为了验证这一假设,我找到了以下文章:GarbageCollectionNotifications和GarbageCollectionNotificationsin.NET4.0,它们解释了如何在垃圾收集器开始运行以及何时完成时通知我的应用程序。因此,基于这些文章,我创建

c# - 在C#中监视垃圾收集器

我有一个WPF应用程序,遇到很多性能问题。最糟糕的是,有时应用程序会冻结几秒钟,然后再次运行。我目前正在调试该应用程序,以查看此冻结可能与之相关,并且我认为可能导致此冻结的原因之一是垃圾收集器。由于我的应用程序在非常有限的环境中运行,因此我相信垃圾收集器在运行时可以使用机器的所有资源,而不会将任何资源留给我们的应用程序。为了验证这一假设,我找到了以下文章:GarbageCollectionNotifications和GarbageCollectionNotificationsin.NET4.0,它们解释了如何在垃圾收集器开始运行以及何时完成时通知我的应用程序。因此,基于这些文章,我创建

c# - VS2015升级后的垃圾回收和Parallel.ForEach问题

我有一些代码可以在我自己的类RC#DataFrame类中处理数百万行数据。有许多Parallel.ForEach调用用于并行迭代数据行。此代码已使用VS2013和.NET4.5运行了一年多,没有出现任何问题。我有两台开发机器(A和B),最近将机器A升级到VS2015。大约有一半时间我开始注意到我的代码出现奇怪的间歇性卡住。让它运行很长时间,事实证明代码最终确实完成了。只需15-120分钟,而不是1-2分钟。由于某种原因,使用VS2015调试器尝试破解所有内容的尝试不断失败。所以我插入了一堆日志语句。事实证明,当在Parallel.ForEach循环期间存在Gen2集合时(比较每个Par

c# - VS2015升级后的垃圾回收和Parallel.ForEach问题

我有一些代码可以在我自己的类RC#DataFrame类中处理数百万行数据。有许多Parallel.ForEach调用用于并行迭代数据行。此代码已使用VS2013和.NET4.5运行了一年多,没有出现任何问题。我有两台开发机器(A和B),最近将机器A升级到VS2015。大约有一半时间我开始注意到我的代码出现奇怪的间歇性卡住。让它运行很长时间,事实证明代码最终确实完成了。只需15-120分钟,而不是1-2分钟。由于某种原因,使用VS2015调试器尝试破解所有内容的尝试不断失败。所以我插入了一堆日志语句。事实证明,当在Parallel.ForEach循环期间存在Gen2集合时(比较每个Par

c# - 如何编写单元测试以确定对象是否可以被垃圾回收?

关于mypreviousquestion,我需要检查将由CaSTLeWindsor实例化的组件在我的代码使用完后是否可以被垃圾回收。我已经尝试了上一个问题的答案中的建议,但它似乎没有按预期工作,至少对于我的代码而言。所以我想编写一个单元测试来测试在我的一些代码运行后是否可以对特定对象实例进行垃圾回收。这有可能以可靠的方式做到吗?编辑我目前根据PaulStovell的回答进行了以下测试,该测试成功了:[TestMethod]publicvoidReleaseTest(){WindsorContainercontainer=newWindsorContainer();container.K

c# - 如何编写单元测试以确定对象是否可以被垃圾回收?

关于mypreviousquestion,我需要检查将由CaSTLeWindsor实例化的组件在我的代码使用完后是否可以被垃圾回收。我已经尝试了上一个问题的答案中的建议,但它似乎没有按预期工作,至少对于我的代码而言。所以我想编写一个单元测试来测试在我的一些代码运行后是否可以对特定对象实例进行垃圾回收。这有可能以可靠的方式做到吗?编辑我目前根据PaulStovell的回答进行了以下测试,该测试成功了:[TestMethod]publicvoidReleaseTest(){WindsorContainercontainer=newWindsorContainer();container.K

c# - 我如何让 .NET 积极地进行垃圾收集?

我有一个用于图像处理的应用程序,我发现自己通常分配4000x4000ushort大小的数组,偶尔也会分配float等。目前,.NET框架在这个应用程序中似乎是随机崩溃的,几乎总是出现内存不足错误。32mb并不是一个巨大的声明,但如果.NET正在产生内存碎片,那么如此大的连续分配很可能不会按预期运行。有没有办法告诉垃圾收集器更积极,或者对内存进行碎片整理(如果这是问题所在)?我意识到存在GC.Collect和GC.WaitForPendingFinalizers调用,并且我已经在我的代码中大量使用它们,但我仍然遇到错误。可能是因为我正在调用大量使用native代码的dll例程,但我不确定

c# - 我如何让 .NET 积极地进行垃圾收集?

我有一个用于图像处理的应用程序,我发现自己通常分配4000x4000ushort大小的数组,偶尔也会分配float等。目前,.NET框架在这个应用程序中似乎是随机崩溃的,几乎总是出现内存不足错误。32mb并不是一个巨大的声明,但如果.NET正在产生内存碎片,那么如此大的连续分配很可能不会按预期运行。有没有办法告诉垃圾收集器更积极,或者对内存进行碎片整理(如果这是问题所在)?我意识到存在GC.Collect和GC.WaitForPendingFinalizers调用,并且我已经在我的代码中大量使用它们,但我仍然遇到错误。可能是因为我正在调用大量使用native代码的dll例程,但我不确定

.NET CLR之垃圾回收(GC)

笔记首发于:lengyueling.cn什么是CLR公共语言运行库(commonlanguageruntime,CLR)是托管代码执行核心中的引擎。运行库为托管代码提供各种服务,如跨语言集成、代码访问安全性、对象生存期管理、调试和分析支持。它是整个.NET框架的核心,它为.NET应用程序提供了一个托管的代码执行环境。它实际上是驻留在内存里的一段代理代码,负责应用程序在整个执行期间的代码管理工作。它的其中一个重要作用就是进行.NET平台下语言的垃圾回收GC垃圾回收什么是垃圾回收Net程序可以找出某个时间点上哪些已分配的内存空间没有被程序使用,并自动释放它们。自动找出并释放不再使用的内存空间的机制