相关疑难解决方法(0)

什么是专用字节,虚拟字节,工作集?

我试图使用perfmon Windows实用程序来调试进程中的内存泄漏.

这就是perfmon解释这些术语的方式:

Working Set是此过程的工作集的当前大小(以字节为单位).工作集是过程中线程最近触及的一组内存页面.如果计算机中的可用内存超过阈值,则即使不使用页面,页面也会保留在进程的工作集中.当可用内存低于阈值时,将从工作集中剪裁页面.如果需要它们,它们将在离开主存储器之前被软故障返回工作集.

Virtual Bytes是进程正在使用的虚拟地址空间的当前大小(以字节为单位).使用虚拟地址空间不一定意味着相应地使用磁盘或主存储器页面.虚拟空间是有限的,并且该过程可以限制其加载库的能力.

Private Bytes是此进程分配的内存的当前大小(以字节为单位),无法与其他进程共享.

这些是我的问题:

是否应该测量私有字节,以确定进程是否有任何泄漏,因为它不涉及任何共享库,如果发生任何泄漏,将来自进程本身?

该进程消耗的总内存是多少?它是虚拟字节还是虚拟字节和工作集的总和?

私有字节,工作集和虚拟字节之间是否有任何关系?

还有其他工具可以更好地了解内存使用情况吗?

debugging operating-system memory-leaks memory-management

463
推荐指数
4
解决办法
27万
查看次数

如何在c#中删除数组?

如果这是一个显而易见的问题,我很抱歉,但谷歌或搜索都没有让我得到答案.

有没有办法完全删除数组?

我想相反int[] array = new int[5]

c# arrays

24
推荐指数
4
解决办法
8万
查看次数

显式释放内存

我知道这似乎是重复的,但我认为这种情况可能有些不同。

在我的MVC应用程序中,我有一个ViewModel,其中包含一个大List,用于显示类似于Excel工作表的表。每个MyComplexClass包含一个MyComplexClass列表和一个MyComplexColumn列表。

这会占用很大的内存,但是现在我遇到了问题。我应该写一个方法来清理我的大表,并向其中加载另一组数据。我可以这样写:

    MyViewModel.Lines = new List<MyComplexClass>();
    MyViewModel.LoadNewSetOfData(SetOfData);
Run Code Online (Sandbox Code Playgroud)

但是,从C背景开始,明确地失去对旧List的引用并不是我能做的,并且每天早晨继续照照镜子。

我看到HereHereHere,可以将引用设置为null,然后调用

GC.Collect()
Run Code Online (Sandbox Code Playgroud)

但是有人告诉我,我并不是真正的最佳实践,尤其是因为它可能确实影响性能,并且因为我无法知道GC是否已处置了这种特定的内存分配。

我有没有办法像Free()这样的东西继续生活下去?

谢谢

c# asp.net memory-management

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