gpt4 book ai didi

c# - LOH、弱引用、大对象的垃圾回收

转载 作者:行者123 更新时间:2023-11-30 18:05:51 26 4
gpt4 key购买 nike

在我的应用程序中,我需要将大文件(大约 250 MB)加载到内存中,我以一种惰性的方式进行——当用户要求查看文件时——我正在加载它。之后,每次用户尝试访问该文件时,我都能立即显示它,因为它已经位于内存中。所以,问题在于垃圾收集......我正在加载的每个文件,我都是通过 WeakReference 加载的,但 :我测试了几次,我能够将大约 3GB 加载到内存中(比应用程序变得不可用),但 GC 没有发生。我无法调用 GC.Collect(2),因为我无法确定调用它的时间,所以如何告诉 GC 在好的时刻收集内存(弱引用)(该死的,3GB 太多了......看来GC 只是不做他的工作)热点解决了吗?我确实需要延迟加载,但我需要在进程使用超过 1GB 或类似内存时收集内存

最佳答案

有一个名为 GC.GetTotalMemory(bool forceFullCollection) 的静态函数 ( http://msdn.microsoft.com/en-us/library/system.gc.gettotalmemory.aspx )。如果您已超过某个阈值,您可以使用它在将新文件加载到内存之前强制进行垃圾收集。

编辑:一个可能的实现

public MyFile GetMyFile(){
if ( !is_my_file_in_memory() ) {
if (CG.GetTotalMemory(false) > MY_THRESHOLD ) {

GC.Collect(2);

}
load_my_file_in_memory();
}
return get_my_file_from_memory();
}

关于c# - LOH、弱引用、大对象的垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157419/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com