3

刚看到这个网站。功能 9 是内存管理,他们声称他们的产品“自动释放 [es] 不再需要的内存”。

这是一种营销策略,还是你认为他们有什么诡计?他们是否只是根据 .Net 运行时在任何情况下提供的内容提出声明(或者他们是否喘不过气来调用 GC.Collect())?

对产品不是很感兴趣,DotFuscator 对我来说就足够了——我只是对如何实现这一点很感兴趣。

4

2 回答 2

4

有趣的。

2007 年的评论包含以下内容:

{smartassembly} 使用几种不同的技术来降低内存使用量。

我们向 {smartassembly} 的开发人员询问了一些细节,他们告诉我们,默认情况下,CLR 会为 .NET 程序集保留大量内存——无论他们是否请求。因此,{smartassembly} 智能地检测 CPU 何时空闲(或空闲),并根据其要求增加或减少为您的程序集保留的内存量 - 从某种意义上说是“自动”GC,除了内存可能会或可能不会正在使用。

同样,{smartassembly}(得益于 .NET 的设计方式,可以从字面上访问您的源代码)将任何和所有没有任何可检测的“子”类继承自它们的类标记为“密封”,从而减少 CLR 在运行时使用的内存和 CPU 量,以确定哪些函数应可供其他类和库使用。

同一篇评论有一对“之前/之后”的屏幕截图,显示应用程序从 8M 到 420K。这向我表明,它实际上只是减少了应用程序的工作集,而不是真正的内存需求。如果您最小化应用程序,则会出现相同的“优化”。它不会突然占用更少的内存。我不相信桌面 .NET 框架真的可以只用 420K 运行。

自动密封功能很有趣 - 除了查找虚拟方法外,我看不出它有什么帮助。我怀疑影响是否真的很大,但我当然没有对其进行基准测试。

所以,没有任何结论,但我怀疑它是否在做任何我特别想要的事情。

于 2008-12-04T08:28:35.593 回答
0

我可能错了,但在我看来,SmartAssembly 将数据推送到页面文件。如果在任务管理器中选择 CommitSize 和 PF delta 列,您将看到虽然 WorkingSet 减小了大小,但提交大小几乎保持不变。如果您随后尝试访问应用程序中的某些内容,您会看到很多页面错误。

如果这是“内存优化”的行为,那么我认为该名称不适合该功能,应该简单地称为“去优化”,因为访问页面文件的成本可能会显着降低性能。

我对这种解释有误吗?

于 2012-10-22T16:55:20.107 回答