DotNET项目资源和内存,发生了什么?

时间:2010-01-04 20:17:31

标签: .net memory resources

在哪里可以找到有关项目资源和内存的可靠信息?我想知道什么时候资源从dll加载到内存中,当它们被GC等删除时。

原因是我的应用程序在源代码中将HTML-Strings作为帮助文件主题,我即将添加包含图像的可能性。我不在乎我的dll大小是否会大幅增长,但我确实关心我的应用程序的内存占用量是否大幅增长。

5 个答案:

答案 0 :(得分:2)

我不完全确定.NET是否与普通Win32相同,但它通常的工作方式是:

加载库/应用程序后,DLL / EXE中的嵌入资源(即资源字符串) 将加载到内存中。但是,如果资源长时间不使用,可以卸载/分页。因此,您不必担心内存不足。

话虽如此 - HTML帮助并不是一件非常棒的事情。如果你有很多,我真的建议将它存储在应用程序外部的某个地方。这就是像CHM这样的格式。

<强>更新

根据您的评论,我想您可能需要查看satellite assemblies。当您需要存储大量不经常使用(或根本不使用)的嵌入式资源(即本地化)时,这是一种非常常见的方法。它们仍然是编译的程序集,应该有希望适合您的插件系统。

每个插件实际上都是两个程序集,一个由主应用程序加载,另一个在插件中声明为引用。一切仍然是完全独立的,但在用户实际请求帮助之前,您不会加载卫星DLL。

答案 1 :(得分:1)

看看这个blog它有关于调试技术的优秀信息,以便找到问题,还可以看看更多以.net为中心的罢工之子。

答案 2 :(得分:1)

This应用程序会给你很多(如果不是全部)这些信息,但它很难阅读。

对于不同版本的.Net,它有几个不同版本。我所关联的是我相信的那个。

答案 3 :(得分:1)

内存分析器将帮助您获取此信息。我可以推荐SciTech .Net Memory Profiler,但还有更多选择。例如,请参阅the answers to this question

答案 4 :(得分:1)

听起来你可能正在寻找一个内存分析器。来自SciTech的那个非常好:.NET Memory Profiler。他们有两周免费试用。