gpt4 book ai didi

c# - OpenFileDialog时如何释放内存?

转载 作者:太空狗 更新时间:2023-10-30 00:43:17 28 4
gpt4 key购买 nike

Winform OpenFileDialog,每次打开内存都会增加,dispose() and OpenFileDialog = null 不起作用,内存不丢失。 .

如何解决这个问题??

   private void btnLocalPicture_Click(object sender, EventArgs e)
{
OpenFileDialog ofdSelectPicture = new OpenFileDialog();
ofdSelectPicture.Filter = "PicFile|*.jpg;*.png;*.jpeg;*.gif;*.bmp;*.tif";
if (ofdSelectPicture.ShowDialog() == DialogResult.OK)
{
if (showPicture != null)
showPicture.Dispose();
showPicture = Image.FromFile(ofdSelectPicture.FileName);
if (pbShowPicture.Image != null)
pbShowPicture.Image.Dispose();
pbShowPicture.Image = showPicture;
path = ofdSelectPicture.FileName;
WordTip.Visible = false;
if (pbShowPicture.Image != null)
picOK.Enabled = true;
}
ofdSelectPicture.Dispose(); //not working
ofdSelectPicture = null; //not working
GC.Collect();
}

最佳答案

您可以通过“项目”+“属性”、“调试”选项卡查看发生了什么,勾选“启用非托管调试”选项。启动您的程序并选择“输出”窗口。显示对话框。

您现在将看到加载到您的进程中的 DLL 列表。这些是在您的机器上注册的 shell 扩展。您究竟会得到什么是不可预测的,每个人都有自己喜欢的一组扩展。程序员往往有很多。

是的,这些扩展会消耗您进程中的内存。只是因为这些 DLL 占用了你的虚拟内存地址空间中的空间。也因为这些 DLL 分配内存供自己使用。写得不好的肯定会泄漏内存。请注意,这些扩展分配的内存始终是非托管内存,因此请确保您有一个可以显示泄漏的好工具。像 TaskMgr.exe 这样的东西还不够好。

您可以为此做两件基本的事情。首先是忽略它,这个问题是你的机器特​​有的,你的用户不会有同样的问题。您无法修复漏洞,因为您没有扩展的源代码。或者您可以使用 SysInternals 的 AutoRuns 实用程序追查麻烦制造者。它向您显示哪些 shell 扩展已注册,并允许您通过单击复选框取消注册它们。

关于c# - OpenFileDialog时如何释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11708773/

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