Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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#_Object - Fatal编程技术网

C# 调用创建对象的函数是否会导致内存泄漏?

C# 调用创建对象的函数是否会导致内存泄漏?,c#,object,C#,Object,这里没有。假设我做了一个这样的函数: public void something() { List<string> list = new List<string>(); } 然后我称之为10倍。它将创建10个同名对象,还是将替换为新的空对象,以使对象总数仍然为1?这样做会导致内存泄漏吗?抱歉,英语不好。不,它不会导致内存泄漏 在框架上工作。编译后的.Net应用程序在称为公共语言运行时的特殊环境中运行 CLR中存在一个释放应用程序不再使用的对象内存的命令。垃圾收集器

这里没有。假设我做了一个这样的函数:

public void something()
{
   List<string> list = new List<string>();
}

然后我称之为10倍。它将创建10个同名对象,还是将替换为新的空对象,以使对象总数仍然为1?这样做会导致内存泄漏吗?抱歉,英语不好。

不,它不会导致内存泄漏

在框架上工作。编译后的.Net应用程序在称为公共语言运行时的特殊环境中运行

CLR中存在一个释放应用程序不再使用的对象内存的命令。垃圾收集器在后台工作,所以您不必担心它


如果需要,可以手动调用垃圾收集器:System.GC.Collect,但不建议这样做。跑步很贵。您必须非常确定代码编写得很好,并且您知道自己在做什么。以下是一些示例:

不,它不会导致内存泄漏

在框架上工作。编译后的.Net应用程序在称为公共语言运行时的特殊环境中运行

CLR中存在一个释放应用程序不再使用的对象内存的命令。垃圾收集器在后台工作,所以您不必担心它


如果需要,可以手动调用垃圾收集器:System.GC.Collect,但不建议这样做。跑步很贵。您必须非常确定代码编写得很好,并且您知道自己在做什么。下面是一些示例:

是的,如果调用10次,它将创建10个新对象。不,这不会导致内存泄漏1。在托管语言中使用垃圾收集器的一个要点是,在大多数情况下,您不必考虑内存是如何使用的2

每次调用都会创建列表的一个新实例,这也很好,因为现在越来越多的程序将运行多个线程,您不希望同时发生两个调用来干扰彼此对列表的使用

1为了在.NET中正确地成为内存泄漏,您需要一些长寿命的东西来保留对应该是短命对象的引用,而实际上它永远不会使用这些引用。局部变量(如此处)的寿命相对较短


2如果你真的在意,你最好学会使用内存分析器来查看内存在哪里使用。

是的,如果调用10次,它将创建10个新对象。不,这不会导致内存泄漏1。在托管语言中使用垃圾收集器的一个要点是,在大多数情况下,您不必考虑内存是如何使用的2

每次调用都会创建列表的一个新实例,这也很好,因为现在越来越多的程序将运行多个线程,您不希望同时发生两个调用来干扰彼此对列表的使用

1为了在.NET中正确地成为内存泄漏,您需要一些长寿命的东西来保留对应该是短命对象的引用,而实际上它永远不会使用这些引用。局部变量(如此处)的寿命相对较短


2如果你真的在意,你最好学会使用内存分析器来查看内存在哪里被使用。

对此我还是个新手。因此,我在VisualStudio中通过滥发上面的函数示例进行了实验,并且进程内存没有增加。那么我之前创建的其他9个对象发生了什么?它们是被GC处理掉了还是永远不用?@Alfian-请记住,每个空列表的大小约为40字节。但是CLR并不是每次分配到操作系统,它会获取大块内存,然后自己分配部分内存。您不太可能看到它需要从操作系统重新分配不到1K的总内存使用量。其他列表很可能是垃圾,但何时以及是否收集了这些列表通常不值得详细讨论。GC对程序员来说是不可见的,这意味着你不必考虑内存的使用。此外,假设运行在moderns CPU上的modenrs操作系统能够很好地进行内存管理,包括32位和64位以及虚拟内存和/或交换。也就是说,对于服务器或图像和视频处理软件等数据密集型应用程序,唯一的关键点是性能下降之前的物理RAM量。对此我还是个新手。因此,我在VisualStudio中通过滥发上面的函数示例进行了实验,并且进程内存没有增加。那么我之前创建的其他9个对象发生了什么?它们是被GC处理掉了还是永远不用?@Alfian-请记住,每个空列表的大小约为40字节。但是CLR并不是每次分配到操作系统,它会获取大块内存,然后自己分配部分内存。你是unl
我很希望看到它需要从操作系统中重新分配不到1K的总内存使用量。其他列表很可能是垃圾,但何时以及是否收集了这些列表通常不值得详细讨论。GC对程序员来说是不可见的,这意味着你不必考虑内存的使用。此外,假设运行在moderns CPU上的modenrs操作系统能够很好地进行内存管理,包括32位和64位以及虚拟内存和/或交换。也就是说,服务器或图像和视频处理软件等数据密集型应用程序的唯一关键点是性能下降之前的物理RAM量。