【问题标题】:SmartAssembly memory managementSmartAssembly 内存管理
【发布时间】:2008-12-04 08:13:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net memory-management obfuscation


    【解决方案1】:

    有趣。

    review from 2007 包含以下内容:

    {smartassembly} 使用了几种不同的 降低记忆力的技巧 用法。

    我们询问了开发人员 {smartassembly} 用于某些 细节,他们告诉我们, 默认情况下,CLR 会保留大量 .NET 程序集的内存 - 是否 他们是否要求。所以 {smartassembly} 智能检测 当 CPU 空闲时(或大约) 并增加或减少金额 为您的程序集保留的内存 根据其要求—— 某种意义上的“自动化”GC,除了 记忆可能会也可能不会 正在使用中。

    同样,{smartassembly} (好处是字面上有 访问您的源代码,感谢 .NET 的设计方式)标志着任何 以及所有没有的类 可检测的“子”类继承 从他们作为“密封”,从而减少 使用的内存和 CPU 量 CLR 在运行时确定 应该做哪些功能 可用于其他班级和 图书馆。

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

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

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

    【讨论】:

    • 仔细想想,这是一个非常糟糕的主意。想想一个闲置了 3 个小时的服务器,SmartAssembly 减少了它的工作集,突然你的用户数量激增,.Net 将不得不重新分配所有的内存。人们可能应该相信微软:)。我想知道它是否也可以在 Mono 上运行
    • 这真是个坏主意。过去我们使用了“内存优化”功能,并且在使用终端服务的客户端(使用我们的桌面应用程序在同一台机器上超过 10 个用户会话)这会导致严重的性能损失,因为磁盘无法跟上页面的数量故障和交换访问...
    【解决方案2】:

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

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

    我的解释错了吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 2012-03-21
      • 1970-01-01
      • 2016-10-12
      • 2012-06-14
      相关资源
      最近更新 更多