- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我遇到了这个问题。
Garbage Collector not doing its job. Memory Consumption = 1.5GB & OutOFMemory Exception
感觉自己的理解有问题。请澄清这些事情。
Destructor
和 IDisposable.Dispose
是释放不受 .NET 控制的资源的两种方法。这意味着,除了内存之外的一切。对吧?使用
block 只是调用对象的IDisposable.Dispose()
方法的更好方式。这是我指的主要代码。
class someclass
{
static someMethod(Bitmap img)
{
Bitmap bmp = new Bitmap(img); //statement1
// some code here and return
}
}
这是我用于测试的类:
class someotherClass
{
public static voide Main()
{
foreach (string imagePath in imagePathsArray)
{
using (Bitmap img1 = new Bitmap(imagePath))
{
someclass.someMethod(img1);
// does some more processing on `img1`
}
}
}
}
statement1
是否存在内存泄漏?
问题 1:假设每张图片大小为 10MB。那么这个 bmp
对象是否至少占用 10MB?我的意思是,它会制作整个图像的全新副本吗?或者只是引用它?
问题 2:我应该还是不应该将 statement1 放在 using
block 中?
我的论点:我们不应该。因为 using
不是为了释放内存而是为了释放资源(在这种情况下是文件句柄)。如果我在 using
block 中使用它。它在此处关闭由此 bmp
对象封装的文件句柄。这意味着我们也正在关闭文件句柄对于调用者的 img1 对象。哪个不正确?
截至内存泄漏。不,这里没有内存泄漏的范围。因为引用 bmp
在返回此方法时被销毁。这使得它引用的内存没有任何指针。所以,它的垃圾被收集了。我说得对吗?
编辑:
class someclass
{
static Bitmap someMethod(Bitmap img)
{
Bitmap bmp = new Bitmap(img); //can I use `using` block on this enclosing `return bmp`; ???
// do some processing on bmp here
return bmp;
}
}
最佳答案
您将内存等同于托管资源,这根本不是一回事。
如果您创建了一个实现了IDisposable
类型的新对象,您应该在使用完成后将其释放。期间。
事情的真相是,除非你用 Reflector 之类的东西反汇编 Bitmap
类,否则你不会知道它如何处理传入其构造函数的另一个实例,或者它的 Dispose
方法确实如此。包含 IDisposable
接口(interface)应该被视为来自类开发人员的指令,在您完成它时调用 Dispose
方法。您之前的问题说您正在观察内存泄漏;我们已经指出您并没有处理所有内容 - 您是否尝试添加我们建议的处理调用并查看内存泄漏问题是否已解决?
关于c# - 关于位图、图像和 `using` block 的一些疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2560512/
就在几周前,Google 更改了 Android LVL API(许可证验证库)。 在旧 LVL 中,许可证检查基于使用基于每个帐户生成的公钥/私钥进行的许可证验证。新的假设是对每个应用程序库使用公钥
我在代码中创建了下面的两个类,我不确定我是否以正确的 oop 方式创建了它。我将几何类和顶点设置为两个不同的类,或者它们可以是一个父亲和一个 child ,这很好吗?另一个问题是当我调用几何显示方法时
我正在尝试使用 POST 将变量从 try.htm 传递到 chat.php try.htm 的代码是: function yo() { var text = $("#m
我从未使用过代码源控制系统,我从 GitHub 开始,它看起来很棒! 我阅读了指南,我想我可以很好地理解它是如何工作的,而且我已经在使用它了,但我不清楚一些事情:GitHub 是否会自动将原始存储库中
我有这个函数insert() 该函数在表users中插入数据并发送电子邮件。 我需要在创建另一个状态之前终止前一个状态,对吗?因此,我需要将激活链接存储在另一个表中,即 activationLinks
目前正在为差异模块使用带有差异模式的 postgres。现在我计划切换到 oracle。但我听说在 oracle 模式中不存在..是真的吗..如果是这样我该如何迁移? 最佳答案 在 Oracle 中,
我有以下父对象: Context = { ContextModel: Backbone.Model.extend({ //model Code }), ContextLi
在 C++ 中,我了解到变量用于数据存储,对象是类的实例。但在 JavaScript 中,我看到人们将变量称为对象。为什么变量在 JavaScript 中被称为对象。我对此感到困惑。 最佳答案 在 j
我正在浏览有关 Play 的帖子! framework 并遇到了一些讨论 ecommerce 的帖子。由于我是两者的初学者,我想做一个练习。我写下了一些用例和一些要求如下。我会想听听您对此的看法,希望
人们说 asList方法将数组转换为列表并且不复制,因此“aList”中的每个更改都会反射(reflect)到“a”中。因此,在“aList”中添加新值是非法的,因为数组的大小是固定的。 但是,asL
我决定使用 React-Router 来管理使用 REACT JS 的 Meteor JS 应用程序的路由。 我已经让 React-Router “以某种方式”工作,但它有一些负面影响,我想在这里解释
Class Carro { String name String marca String matricula } Class CarroMovel{ String pro1 String prop2
我对如何设置我的 SVN 东西有一些疑问。 首先是我的情况:程序员独自处理大部分内容,不需要外部访问(目前)。 我要: 一个快速的 SVN,最好是免费的。 私有(private) 备份友好 比较轻松
我正在用 MVVM 做我的第一个 C# WPF 项目,我有几个问题。 第一,我想从我的模型中列出一些对象,当我点击其中一个时,屏幕上会显示一个表单(或默认情况下创建的表单)。在我的表单中,绑定(bin
我对mysql有疑问。我可以轻松地将字段限制为某些字符,例如姓氏,以及其他字段,例如包含特定事件的迷你日志,我认为该事件不再是 2 页(或更少的字符)。我知道这是一个相当常见的问题,我看到了很多关于这
我正在尝试实现 HDLC 帧格式类型 3,但我对帧的 Octets/Modulo 8 编码有一些疑问。 首先,HDLC帧是否全部以Octets传输? 一个帧的长度是 'n' 个八位字节是什么意思?请举
我正在开发一个 ASP.Net 电子商务应用程序。我使用 ASP.Net Web 表单。当我完成整个应用程序时,我考虑缓存一些数据,以便提高应用程序性能。 (坏主意......我必须从一开始就考虑到这
我知道下面的代码会产生编译错误: class A{ public : virtual void name(){cout(b); //Error : 'A' is an inaccessible bas
我是一名优秀的程序员,十分优秀!