首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ThreadAbortException在ASP.Net 4泄漏文件句柄?

ThreadAbortException在ASP.Net 4泄漏文件句柄?
EN

Stack Overflow用户
提问于 2012-04-25 20:14:45
回答 2查看 487关注 0票数 3

通常情况下,如果我们的文件服务器速度慢,并且页面没有在超时之前完成,ASP.Net就会用一个ThreadAbortException来点击它。如果这种情况发生在Win32Native.CreateFile内部,它会将文件句柄锁定,直到我们完成iis重置。

这是.NET中的一个缺陷吗?除了把超时时间提高到某个庞大的数字这样的坏主意之外,我们还能做些什么吗?我不认为ThreadAbort.Reset会有帮助,因为损坏已经完成,我甚至没有从FileStream返回的文件句柄来自己关闭它。

在Microsoft.Win32.Win32Native.CreateFile(String lpFileName,Int32 dwDesiredAccess,FileShare dwShareMode,SECURITY_ATTRIBUTES securityAttrs,FileMode dwCreationDisposition,Int32 dwFlagsAndAttributes,IntPtr hTemplateFile)

在Microsoft.Win32.Win32Native.SafeCreateFile(String lpFileName,Int32 dwDesiredAccess,FileShare dwShareMode,SECURITY_ATTRIBUTES securityAttrs,FileMode dwCreationDisposition,Int32 dwFlagsAndAttributes,IntPtr hTemplateFile)

在System.IO.FileStream.Init(字符串路径、FileMode模式、FileAccess访问、Int32权限、布尔useRights、FileShare共享、Int32 bufferSize、FileOptions选项、SECURITY_ATTRIBUTES secAttrs、String msgPath、布尔bFromProxy、布尔useLongPath)

在System.IO.FileStream..ctor(字符串路径、FileMode模式、FileAccess访问、FileShare共享、Int32 bufferSize、FileOptions选项、字符串msgPath、布尔bFromProxy)

在System.IO.FileStream..ctor(字符串路径,FileMode模式)

EN

回答 2

Stack Overflow用户

发布于 2013-07-30 19:29:32

看起来您也向Microsoft提交了这个问题,并且没有在这里更新它们的答案:

http://connect.microsoft.com/VisualStudio/feedback/details/739044/threadabortexception-in-asp-net-4-during-new-filestream-leaking-file-handle

以下是微软的回应:

不建议

在ASP.NET中的同步请求中执行长时间运行操作。如果您正处于超时期间,您可以选择简单地增加已配置的请求超时,或者更改为使用异步请求,异步请求在执行异步操作时不会超时,因此不会抛出线程中止异常。

我猜线程中止(或任何异步异常),最终能够并将这样做。

但是框架在内部打开文件时似乎会使用SafeFileHandle,所以当垃圾收集器悠闲地接近它时,它应该被关闭。

票数 1
EN

Stack Overflow用户

发布于 2013-07-03 02:46:41

您是通过在finally子句中使用close还是使用using方法来正确地关闭代码中的文件?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10323058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档