gpt4 book ai didi

c# - 这是否意味着一个对象如果没有实现 IDisposable 就不需要手动清除?

转载 作者:太空狗 更新时间:2023-10-29 21:57:54 26 4
gpt4 key购买 nike

我遇到的问题是以下错误:

System.ComponentModel.Win32Exception (0x80004005): 操作成功完成

堆栈跟踪:

at MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d)
at MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks)
at MS.Win32.MessageOnlyHwndWrapper..ctor()
at System.Windows.Threading.Dispatcher..ctor()
at System.Windows.Threading.Dispatcher.get_CurrentDispatcher()
at System.Windows.Threading.DispatcherObject..ctor()
at System.Windows.Media.Imaging.BitmapDecoder..ctor(SafeMILHandle decoderHandle, BitmapDecoder decoder, Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, Boolean insertInDecoderCache, Boolean isOriginalWritable, Stream uriStream, UnmanagedMemoryStream unmanagedMemoryStream, SafeFileHandle safeFilehandle)
at System.Windows.Media.Imaging.JpegBitmapDecoder..ctor(SafeMILHandle decoderHandle, BitmapDecoder decoder, Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, Boolean insertInDecoderCache, Boolean originalWritable, Stream uriStream, UnmanagedMemoryStream unmanagedMemoryStream, SafeFileHandle safeFilehandle)
at System.Windows.Media.Imaging.BitmapDecoder.CreateFromUriOrStream(Uri baseUri, Uri uri, Stream stream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption, RequestCachePolicy uriCachePolicy, Boolean insertInDecoderCache)
at System.Windows.Media.Imaging.BitmapDecoder.Create(Stream bitmapStream, BitmapCreateOptions createOptions, BitmapCacheOption cacheOption)
at App.Business.WPFImageService.ReadBitmapFrame(Stream stream)
at App.Business.WPFImageService.UploadFileToAmazon(String amazonPath, Boolean isBlankImage)

通过研究,我发现当进程的 Handles 数量超过 10k 时会发生此问题。如果我忘记调用 .Dispose() 方法,就会发生这种情况。

在我的应用程序中,我已经清楚地(100% 确定)处置了实现 IDisposable 的每个对象。

虽然我仍然面临这个问题,但现在我不确定在使用后必须清除的每个对象是否都实现了 IDisposable

我在我的应用中使用了以下类型的对象。

BitmapFrameDrawingVisualDrawingContextRenderTargetBitmapSolidColorBrushBitmapDecoder, Stream, MemoryStream, FileStream, PngBitmapEncoder.

StreamMemoryStreamFileStream 实现了 IDisposable,我很清楚地调用了 Dispose() 在他们身上。但是,DrawingContext 没有实现 IDisposable 但有一个 .Close() 方法,该方法也被调用。

其他对象没有.Dispose(), .Close(), Flush() 或任何可以与主题相关的东西.

我被卡住了,为什么我的句柄超过 10k(我已经通过添加句柄列从任务管理中检查过)。在我使用 WPF/WIC 添加一些图像处理功能之前,此应用程序没有出现此问题。

有什么想法吗?

最佳答案

尝试确保你也尝试使用语句来确保你得到垃圾回收

  using (DrawingContext dc = dGroup.Open())

http://msdn.microsoft.com/en-us/library/system.windows.media.drawingcontext(v=vs.110).aspx

关于c# - 这是否意味着一个对象如果没有实现 IDisposable 就不需要手动清除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22153583/

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