【发布时间】:2021-04-04 03:59:12
【问题描述】:
我有一个在 ASP.NET 中运行的多租户 .NET 5 应用程序,其中一个请求可以运行任意代码并使用任意数量的内存。如何针对每个请求防止用户使用过多内存?
我知道我可以限制每个进程,也可以限制发出的 HTTP 请求的大小,但这不是我需要的。我需要一种方法,如果用户运行像 int array = int[1,000,000,000,000,000,000,000] 这样的代码,他们会得到一个异常,而不是整个网站都崩溃。
编辑:这是一个 jsfiddle 风格的应用程序(具体来说,它是 darklang.com),虽然使用自定义语言和运行时,所以我可以很好地控制运行时。
【问题讨论】:
-
这似乎是一个架构设计决策,您应该提前做出,而不是上线!在它自己的应用程序域中运行代码怎么样? stackoverflow.com/questions/1094478/… 。显然 App Domains 不再是一个东西,而是使用 LoadContexts 吗?
-
...或者可能不是:docs.microsoft.com/en-us/dotnet/api/… :“使用应用程序域来隔离可能导致进程中断的任务。如果正在执行任务的 AppDomain 的状态变得不稳定,则 AppDomain 可以在不影响进程的情况下卸载。当进程必须长时间运行而不重新启动时,这一点很重要"
-
" 如果用户运行代码" 是吧?你不是在谈论开发人员编写代码吗?为什么网络应用程序的最终用户要编写代码?什么样的代码?退后一步,描述您的实际问题。
-
我假设您正在尝试构建一个 API,允许人们在浏览器中编写代码,将其提交到后端,然后您将动态编译和运行它。就像那些code websites 一样。
-
@JeremyLakeman:以dotnetfiddle 之类的网站为例,说明用户如何“在后端运行代码”。
标签: c# asp.net .net .net-core memory-management