首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建、重命名或删除文件夹时,ASP.NET会重新启动

创建、重命名或删除文件夹时,ASP.NET会重新启动
EN

Stack Overflow用户
提问于 2010-02-12 08:28:32
回答 5查看 8.6K关注 0票数 17

更新--复制问题的过程:

1)在c:\projects\restart-demo创建网站项目

2)添加默认web.config和一个虚拟aspx页面test.aspx

3)将IIS映射到根文件夹c:\projects\restart-demo

4)使用perfmon、运行状况监控、global.asax Application_End中的跟踪等监控应用程序重启。

5)浏览器http://localhost/test.aspx中的请求页面

应用程序启动

6)新建文件夹c:\projects\restart-demo\asdf

应用程序端

7)浏览器http://localhost/test.aspx中的请求页面

应用程序启动

8)将文件夹c:\projects\restart-demo\asdf重命名为c:\projects\restart-demo\asdf1

应用程序端

结束更新

我们正在使用后端内容管理系统在ASP.NET站点中生成文件和文件夹。

用户可以创建/修改/删除文件,并将这些文件推送到web场。

我们注意到的一个问题是:

当用户创建、重命名或删除文件夹时,它会导致应用程序域重新启动。因此,会话、缓存等都会丢失。

注意:它也不需要是像/bin或/App_Code这样的特殊文件夹。

有什么方法可以防止这种行为吗?

它确实会影响性能,原因有两个:

应用程序域重新启动时

  • 缓存被转储
  • 应用程序域需要在重新启动

后重新构建

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-13 01:25:35

当添加到Global.asax中的Application_Start()时,此代码似乎可以解决此问题:

代码语言:javascript
复制
PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", BindingFlags.NonPublic | BindingFlags.Public |  BindingFlags.Static);
object o = p.GetValue(null, null);
FieldInfo f = o.GetType().GetField("_dirMonSubdirs", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);
MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(monitor, new object[] { }); 

http://dotnetslackers.com/Community/blogs/haissam/archive/2008/11/12/disable-session-expiration-when-using-directory-delete.aspx

通过这些更改,我可以创建/修改/删除文件夹,而不会导致应用程序重新启动。

不清楚这是否是最好的解决方案--不知道调用StopMonitoring是否会产生有害的副作用。

票数 15
EN

Stack Overflow用户

发布于 2011-04-29 00:04:54

也许有点晚,但是在应用程序的wwwroot之外的另一个文件夹中存储和处理临时文件也可以解决这个问题。

票数 9
EN

Stack Overflow用户

发布于 2010-02-12 08:42:20

默认情况下,asp.net应用程序将在其虚拟目录中的文件更改的每第15次重启,这是为了超过部分重新编译,它们的内存重量与总体performance...you可以改变这一行为,但内存使用量可能会随着时间的推移而上升和性能下降。

要执行此操作,请设置numRecompilesBeforeAppRestart attribute on the compilation element,您的web.config将具有如下元素:

代码语言:javascript
复制
<configuration>
  <system.web>
    <compilation numRecompilesBeforeAppRestart="15">

默认值是15,您可以将其更改为您想要的任何内容,请阅读链接以获取更多信息。然而,这样做是有原因的,,不建议将你的动态内容放在应用程序的虚拟目录中,最好将它放在它旁边或其他地方。

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

https://stackoverflow.com/questions/2248825

复制
相关文章

相似问题

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