破坏对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
-类型为IUnityController
ImVController
——是声明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)
时,对象不再需要,应该超出范围?
谢谢
如果我把mVController = null时,不再需要GC进入/对象将有资格收集?
取决于IUnityController的实现:如果它拥有ImVController,重置mVController将没有利润。无论如何,GC不会收集垃圾,直到你的应用程序将缺乏内存。
make obj = null;在方法中使对象为空
如果你的对象被其他变量/对象引用,GC将不会收集它。否则,您的反对意见将被收回。一些时间。