ASP.NET网站在运行过程中,会每隔一段时间(有可能是一个小时,也有可能20分钟等等)自动重启下,即自动调用Application_Start(),而我在该函数中会调用一个方法,实现将硬盘文件中的数据加载到内存中,以备以后使用,而这个文件数据比较大,所以这个加载过程需要10到20分钟,所以会使得网站在这个时间段内无法访问。换句话说,也就是自动重启一下网站,网站就要10到20分钟无法访问,这有点让人无法接受。所以我想问下大虾们,有没有什么办法可以不让它自动重启;或者采用其他办法使得我加载到内存的数据,能够永久驻留在内存中,并且都有效,直到机器关闭为止,这样的话,网站自动重启也就无大碍了。我想到的方法是写一个WinForm,让它去加载数据,然后Asp.net去调用这些数据,不知道这样能否实现,望大家能够赐教。

解决方案 »

  1.   

    我觉得是这样,楼主的程序可能是一个使用人较少的mis系统或数据报表系统等,可能需要大量的统计数据,
    一般情况下asp.net系统不是在第一次访问时初始化,知道没有人访问的一定时间后才会退出,回收资源的吗!
    我觉得楼主可以在另一个进程内做持久化数据在内存中的工作,比如另开一个service进程,他就负责定时维护和更新数据,这样你的asp.net进程即使退出也没关系,随时都可以通过服务调用内存中的数据。
      

  2.   

    10分钟,每秒100M,60G。
    为一个没有人访问的系统随时准备60G数据在内存里?这合理么?如果是统计的话,为什么不是查询已经统计好的数据而是在访问的时候才统计呢?
      

  3.   

    楼主说加载过程需要10到20分钟,而且如果是正在运算的话,应该也不会自动重启asp.net吧,没人访问才会退出
      

  4.   

    获取那么多数据是否必要,影响负载均衡
    做统计使用SQL SERVER等数据层实现,分布式
      

  5.   

    是的,这个程序和你说的差不多,加载过程中还有大量的计算工作,从而使得这些数据能够连接起来,所以加载时间这么长,不是说数据真的很大,像60G这么大。我的想法和你差不多,开个服务什么的,可是如何使得ASP.NET能够与它通讯呢?最好是能够直接访问到它的内存区域中的数据。
      

  6.   

    有一个问题,楼主在application_start的时候做大量的计算工作,那么这个内存中的数据集怎么样保持
    更新呢,总不能一直就那么放在那里吧!比较好的方法是用数据库作业的方式产生中间表,再去查询中间表