gpt4 book ai didi

c# - C#中内存处理和GC的顺序

转载 作者:太空狗 更新时间:2023-10-29 19:56:23 24 4
gpt4 key购买 nike

在以下情况下,C# 中实际发生了什么:

1) A method gets invoked.
2) The method allocates memory (e.g. MemoryStream mm = new MemoryStream()).
3) An exception occurs in the method which is caught by the invoking classes.

资源“mm”是否被垃圾收集器释放?这是否存在安全风险(例如 DoS)?

P.S.:我知道最好的做法是明确释放任何已分配的资源。这意味着使用“using”语句或“try/catch/finally” block 。

最佳答案

Does the resource "mm" get freed by the garbage collector?

一旦它死了,是的。最终 GC 将运行并释放未引用的内存。

Is this a security risk?

让我们使用精确的术语。 Assets 是有值(value)的东西:私有(private)数据、用户的时间等等。 攻击者 是希望对 Assets 造成伤害的人。 威胁 是攻击者可能造成伤害的方式。 漏洞是场景的一个方面,攻击者可以利用它来弥补威胁。

要回答您的问题,我们需要知道:

  • Assets 是什么?
  • 谁是攻击者?
  • 攻击者对 Assets 构成的威胁是什么?
  • 攻击者可以利用什么漏洞来弥补威胁?

只有您回答了这些问题,我们才有可能知道在出现异常时未能立即释放内存缓冲区是否存在安全风险。

举一个真实的例子, Assets 可能是我的电视,攻击者可能是小偷,威胁是盗窃,漏洞是二楼未上锁的 window 和车库的梯子。梯子和 window 都是该威胁脆弱性的一部分。但是,他们都不会受到纵火等威胁的威胁。在了解实际威胁是什么之前,您无法确定情况的特定方面的风险!

I know it is best practice to explicitly free any allocated resource.

显式清理非托管 资源是一种很好的做法,例如由操作系统控制的文件句柄。通常,您让垃圾收集器清理托管内存。

关于c# - C#中内存处理和GC的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4186200/

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