有没有人知道C# (mono服务器)的主机配置能够在线程之间实现一致的静态变量(即不是每个线程的实例的CGI模型)?
详细信息
我有一些c# (mono)代码,作为一个简单的web应用程序的一部分,我们需要在linux上托管这些代码。我们不需要任何传统的asp甚至是asp.net mvc功能,真正需要的是基于共享静态变量的动态内容响应特定urls的能力。
静态变量:--我们有一个特殊的需求--我们需要静态变量来在所有传入请求中保留它们的值(就像在windows上使用ASP.net mvc应用程序那样)。托管单一c# web应用程序的常见方法,如Apache mod_mono,似乎使用了“每个线程的c#应用程序实例”模型,其中将有多个独立的c#应用程序实例,每个实例都有自己的静态变量。这是我们需要避免的问题。我需要一种托管c#应用程序的方法,该应用程序提供一个共享的静态变量集,所有传入请求都会看到这些变量。如果应用程序回收静态变量被重置(就像在正常的IIS/MVC中一样),只要回收周期很少,就可以了。
背景是,这个web应用程序需要在一个静态变量中保存大量的RAM数据,并快速回答有关该数据的问题。为每个线程打开应用程序的副本将限制RAM资源,并且频繁地将数据重新加载到内存中会使应用程序太慢(偶尔会有IIS/ASP.NETMVC这样的回收利用。这个系统在Windows/IIS7 7(每秒50,000+动态请求)上运行得非常好,我们不想改变这个体系结构,所以我要寻找的答案是托管而不是更改应用程序设计。
发布于 2012-12-01 15:14:45
mod_mono不会为每个新的web请求生成一个新的单进程。如果您与apache或nginx一起使用快速you服务器,也不会这样做。
编辑:静态变量在同一个应用程序域中共享。对于Microsoft .NET IIS和mono (无论您使用的是mod_mono、xsp还是mono快速xsp服务器),都是如此。尽管如此,apache生成多个工作线程,单个请求由单个工作线程处理,但在任何给定时间只有一个单进程运行(除非您已经配置了多个asp.net应用程序,那么每个应用程序只有一个)。
Mono试图实现ASP.NET 100%的兼容性,所以没有设计上的不同行为!
您的程序在linux上的不同行为很可能与mod_mono处理请求的方式无关,而是与mono本身或代码中的一个bug有关(即,通过做出一个在linux上不成立的平台假设)。您应该使用MonoDe信封/xsp进行真正的调试,并尝试更清楚地指出问题,或者在这里粘贴一些示例代码。
https://stackoverflow.com/questions/13480328
复制相似问题