- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我公司的企业解决方案中,我正在检查并尽可能多地清除内存泄漏。
我们有一个 BaseCaptureForm,它被许多其他表单(例如 RecommendationCaptureForm)继承。在整个系统(例如)中,此 RecommendationCaptureForm 被模态调用 (ShowDialog())。据我所知,当以模态方式打开表单时,它们应该包含在 using 语句中或在完成后处理。
BaseCaptureForm 中有一个永远不会被命中的 dispose 方法。我放入了一个终结器,它也从未被击中。 ANTS Memory Profiler 显示所有这些形式都保留在内存中。
有没有人对我如何处理这些捕获表单(打开时间不长)以阻止内存泄漏有任何建议?整个系统中有数百万个 ShowDialog 调用,我想知道是否还有其他人遇到过这个问题?
编辑澄清一下,我可以在 BaseCaptureForm 中做些什么来在关闭后自动处理自身吗?我无法通过所有 ShowDialog() 调用来希望处理它们。在窗体的 OnClosed 事件中调用 dispose 方法会导致令人讨厌的闪烁。
最佳答案
根据您在关闭 (*) 后使用表单的方式,您可以从 FormClosed 事件处理程序中调用 Dispose()。
我没有看到您提到的“讨厌的闪烁”,您可以尝试的一件事是在 FormClosed 事件处理程序中设置 this.Visible = false
。
(*) 只要您不通过公开可见的属性或表单方法公开任何控件或控件的属性,您就可能是安全的。避免这种情况的一种方法是使用支持字段实现此类公共(public)属性,并在关闭表单之前将控件中的任何数据复制到这些支持字段中。
如果不查看代码,就很难判断这在您的场景中是否可行。老实说,我倾向于咬紧牙关,通过添加 using
语句来清理调用。
关于c# - ShowDialog() 内存泄漏解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5718964/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!