破坏对c#表单的引用

本文关键字:引用 表单 | 更新日期: 2023-09-27 18:09:56

我有一个许可证项目(数据库交互项目),我想从从数据库加载数据的表单中删除所有引用,因为我加载了很多数据,内存使用率很高。我对应用程序进行了概要分析。Net Memory Profiler, Ants),并获得与该表单相关的引用:

Module1.cs / Class1 -> Module2.cs / Class2 with the reference ref 1 written on the arrow

我必须在没有剧烈变化的情况下删除它们,程序应该仍然可以工作:)。如果我把引用设为null,程序就会崩溃,因为它可能再次需要这些引用。问题是,我认为,所显示的引用可以在不同的模块中声明,而不是在Profiler显示的模块中声明,使其更难遵循。

在Data.cs我有Data类,并在其中我声明

mVController = table.Resolve<ImVController>();

mVController -类型为ImVController(名称无关)table -类型为IUnityControllerImVController——是声明mVController的接口Resolve -创建与mVController相同类型的容器

我想知道如果我把mVController = null不再需要时,GC进入/对象将有资格收集吗?

table将保存对ImVController类型对象的引用?我猜它是合格的。

如果某个对象被声明了怎么办:

object newObject = DomainObjectFactory.GetObject(typeOfObject);

则使用mVController:

(newObject as Class1).MethodFromClass1(mVController.Property1, mVController.Property2, ...);

我是否像这样删除引用:

object = null;那么它会在某个时间被收集吗?

另一个问题:引用是否应该在方法(例如public void method(ref Type obj))中与ref一起传递然后让obj = null;在方法中使对象也为空?来自所有项目的所有引用是否都指向null>以便GC可以收集?然后调用方法也与ref: method (ref obj)时,对象不再需要,应该超出范围?

谢谢

破坏对c#表单的引用

如果我把mVController = null时,不再需要GC进入/对象将有资格收集?

取决于IUnityController的实现:如果它拥有ImVController,重置mVController将没有利润。无论如何,GC不会收集垃圾,直到你的应用程序将缺乏内存。

make obj = null;在方法中使对象为空

如果你的对象被其他变量/对象引用,GC将不会收集它。否则,您的反对意见将被收回。一些时间。