ASP.NET程序员应用程序域须知

ASP.NET程序员应用程序域须知,第1张

本文将讨论 NET的应用程序域 并且它们是如何对ASP NET的执行和调度产生影响的 当在Windows中启动Notepad程序时 众所周知程序会执行一个包含在容器内的进程 可以启动多个Notepad的实例 并且每个实例都会在一个专注的进行程运行 使用任务管理器 可以看到在系统中当前运行的所有进程的清单 一个进程包括可执行从 *** 作系统中保留的在内存中的代码和程序数据 在进程之内只少有一个包含在进程之内的正在执行指令的线程 并且在多数情况下有多个线程 如果程序打开了任何文件或者资源 这些资源将属于这个进程 一个进程也有一个分界线 包含在进程之内的错误代码不能在当前进程之外的地区腐化 在一个进程之内很容易通讯 但是专业技术要求一个进程对另一个进程通讯是必需的 每一个进程也在一个特殊的上下文安全系统中运行 这个安全系统规定在机器和网络中进程做什么 一个进程是一个在Windows *** 作系统中独立运行的最小单位 这会给在一个单一服务器上对一大堆应用程序的ISP提出一个问题 ISP将会分离每一个在同一个服务器上的与另一个公司的应用程序干扰的ASP NET应用程序 但是相关的发射和执行一个对成百上千的应用程序的过程成本禁止的 介绍应用程序域 NET介绍一个应用程序域的概念 或者AppDomain像一个过程 AppDomain是既是容器又是边界线 NET运行时间使用AppDomain作为代码和数据的容器 就像 *** 作系统一个过程作为代码和数据的容器一样 当 *** 作系统使用一个过程来分离不整齐的代码时 NET运行时间使用一个AppDomain来分离在一个安全边线内的代码 一个AppDomain仅仅属于一个单过程 但是单个过程能够保持多重的AppDomain 一个Appdomain创建起来相对容易(与一个过程比较起来) 并且与一个过程比较起来具有少的维护费用 由于这些原因 一个AppDomain是ISP(提供成千上万的应用程序)的很好的解决方案 每一个应用程序可以生存在一个独立的AppDomain之内 并且许多这样的AppDomain可以生存于一个单一的过程(节省费用)之内 AppDomain 在同服务器上创建了两个ASP NET应用程序 并且没有任何特殊配置 会发生什么事情呢?一个单一的ASP NET手工进程使ASP NET应用程序变成两方面的主要程序 在Windows XP和Windows 中 这一程序被命名为aspnet_wp exe 并且这一程序运行在本地的ASPNET计数器的前后安全关系中 在Windows 手工程序拥有w wp exe并且默认运行在NEOR SERVICE中 一个对旬可以进住在一个AppDomain中 每一个ASP NET应用程序将具有它自己的一套全局变量 Cache Application进住进同一进程 NET AppDomain是一个独立的单元 如果存有共享的或静态成员的类 并且那些类存在于两种应用程序之内 每一个AppDomain拥有它自己的静态字段的备份—数据并不共享 每一个应用程序的数据和代码安全独立存在并且在一边界之内由AppDomain提供 为了在AppDomain之间通讯或者在AppDomain之间交换对象 需要查看在 NET中穿过边界的通讯技术 例如 NET细微的或Web 服务 对将AppDomain作为边界思想的警告之一是ASP NET应用程序在默认情况下会带着充分的信任运行 充分信任的代码可以执行本地代码 并且本地代码可以本质地在进程之内的任何内容 需要运行带着部分信任执行应用程序来约束存取不完整的代码并且对安全的AppDomain验证所有代码 隐藏备份并且重新启动 一旦一个集合加载到一个AppDomain 没有办法从AppDomain集合的办法 不过 从一个进程中移除一个AppDomain是有可能的 如果将一个已更新的dll复制到一个应用程序的子目录中 从ASP NET的运行时间知道有新代码要执行 既然ASP NET不能将dll复制到已存在的AppDomain中 它就会起动一个新AppDomain 旧的应用程序域是 排水已停止 那就是 存在的需要被允许完成执行并且一旦它们执行完成AppDomain可以卸载 带有新代码的新的AppDomain就会开始并且开始所有的新请求 典型地说 当一个dll加载进一个进程时 进程对dll加锁并且不能对磁盘的上的文件进行覆盖 不过 AppDomain有一个众所周知的特点 隐藏复制那所有的允许保留在磁盘上的那些未被加锁的可替换的集合 运行时间对二进制子目录的带有Shadow Copy的ASP NET进行初始化 AppDomain将任何的加锁之前的dll从二进制子目录中拷贝到一个临时位置并且再将这些dll加载到内存 Shadow Copy允许没有将网页在线的情况下对所有在二进制子目录中的任何dll进行重写 熟练掌握Domain 应用程序域替换OS进程将为单独的 NET结点单元 一个可理解的应用程序域将会给你一个在ASP NET应用程序后的手工发生的概念 使用AppDomain类的CurrentDomain属性 可以检查关于代码正在运行的AppDomain的属性 包括我们在此文章中讨论的Shadow Copy lishixinzhi/Article/program/net/201311/11383

第一,内存泄漏
C/C++程序还可能产生另一个指针问题:丢失对已分配内存的引用。当内存是在子程序中被分 配时,通常会出现这种问题,其结果是程序从子程序中返回时不会释放内存。如此一来,对已分配的内存的引用就会丢失,只要 *** 作系统还在运行中,则进程就会一 直使用该内存。这样的结果是,曾占用更多的内存的程序会降低系统性能,直到机器完全停止工作,才会完全清空内存。
第二,C指针错误
用C或C++编写的程序,如Web服务器API模块,有可能导致系统的崩溃,因为只要间接引 用指针(即,访问指向的内存)中出现一个错误,就会导致 *** 作系统终止所有程序。另外,使用了糟糕的C指针的Java模拟量(analog)将访问一个空的 对象引用。Java中的空引用通常不会导致立刻退出JVM,但是前提是程序员能够使用异常处理方法恰当地处理错误。在这方面,Java无需过多的关注,但 使用Java对可靠性进行额外的度量则会对性能产生一些负面影响。
第三,数据库中的临时表不够用
许多数据库的临时表(cursor)数目都是固定的,临时表即保留查询结果的内存区域。在临时表中的数据都被读取后,临时表便会被释放,但大量同时进行的查询可能耗尽数目固定的所有临时表。这时,其他的查询就需要列队等候,直到有临时表被释放时才能再继续运行。
第四,线程死锁
由多线程带来的性能改善是以可靠性为代价的,主要是因为这样有可能产生线程死锁。线程死锁 时,第一个线程等待第二个线程释放资源,而同时第二个线程又在等待第一个线程释放资源。我们来想像这样一种情形:在人行道上两个人迎面相遇,为了给对方让 道,两人同时向一侧迈出一步,双方无法通过,又同时向另一侧迈出一步,这样还是无法通过。双方都以同样的迈步方式堵住了对方的去路。假设这种情况一直持续 下去,这样就不难理解为何会发生死锁现象了。
第五,磁盘已满
导致系统无法正常运行的最可能的原因是磁盘已满。一个好的网络管理员会密切关注磁盘的使用情况,隔一定的时间,就需要将磁盘上的一些负载转存到备份存储介质中(例如磁带)。
日志文件会很快用光所有的磁盘空间。Web服务器的日志文件、SQLNet的日志文件、 JDBC日志文件,以及应用程序服务器日志文件均与内存泄漏有同等的危害。可以采取措施将日志文件保存在与 *** 作系统不同的文件系统中。日志文件系统空间已 满时Web服务器也会被挂起,但机器自身被挂起的几率已大大减低。
第六,服务器超载
Netscape Web服务器的每个连接都使用一个线程。Netscape Enterprise Web服务器会在线程用完后挂起,而不为已存在的连接提供任何服务。如果有一种负载分布机制可以检测到服务器没有响应,则该服务器上的负载就可以分布到其 它的Web服务器上,这可能会致使这些服务器一个接一个地用光所有的线程。这样一来,整个服务器组都会被挂起。 *** 作系统级别可能还在不断地接收新的连接, 而应用程序(Web服务器)却无法为这些连接提供服务。用户可以在浏览器状态行上看到connected(已连接)的提示消息,但这以后什么也不会发生。
总之,还有许多因素也极有可能导致Web香港服务器租用或香港服务器托管站点无法工作。有许多种原因可能导致Web站点无法正常工作,这使得系统地检查所有问题变得很困难。

重庆校园疫情防控小程序登陆不了的原因是:
1、重庆校园疫情防控小程序服务器故障。这时只能等着程序员解决问题。
2、系统调试,重庆校园疫情防控小程序后台程序员进行调试也是无法登录的。
3、登录密码或者是账号存在问题,这个可以重新依据提示 *** 作。
4、网络不稳定或者手机自身服务器存在问题。以上就是重庆校园疫情防控小程序登陆不了的原因。

系统出问题了,只能重做系统。
服务器崩溃的集中原因及解决方案:
内存泄漏:C/C++程序还可能产生另一个指针问题:丢失对已分配内存的引用。当内存是在子程序中被分 配时,通常会出现这种问题,其结果是程序从子程序中返回时不会释放内存。如此一来,对已分配的内存的引用就会丢失,只要 *** 作系统还在运行中,则进程就会一 直使用该内存。这样的结果是,曾占用更多的内存的程序会降低系统性能,直到机器完全停止工作,才会完全清空内存。
C指针错误:用C或C++编写的程序,如Web服务器API模块,有可能导致系统的崩溃,因为只要间接引 用指针(即,访问指向的内存)中出现一个错误,就会导致 *** 作系统终止所有程序。另外,使用了糟糕的C指针的Java模拟量(analog)将访问一个空的 对象引用。Java中的空引用通常不会导致立刻退出JVM,但是前提是程序员能够使用异常处理方法恰当地处理错误。在这方面,Java无需过多的关注,但 使用Java对可靠性进行额外的度量则会对性能产生一些负面影响。
数据库中的临时表不够用:许多数据库的临时表(cursor)数目都是固定的,临时表即保留查询结果的内存区域。在临时表中的数据都被读取后,临时表便会被释放,但大量同时进行的查询可能耗尽数目固定的所有临时表。这时,其他的查询就需要列队等候,直到有临时表被释放时才能再继续运行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13291511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-09
下一篇 2023-07-09

发表评论

登录后才能评论

评论列表(0条)

保存