在 .NET 应用程序中预分配(保证)内存

Pre-allocate (guarantee) memory in a .NET application

.NET 3.5 应用程序是否可以告诉 .NET 运行时间:"hey, I'm going to use n MB memory later on, so please either commit that much now or fail now?"

上下文是:我有一个 C# 控制台应用程序,它 运行 是一个数据库查询 returns 大量数据,然后对其进行一些处理。查询可能需要很长时间(数小时),并且随着读取结果,内存使用量不断增加。查询完成后,由于我需要进行的处理,内存中会立即出现峰值。如果机器没有足够的 RAM,应用程序就会在此时失败——在查询上浪费了几个小时!这对用户来说是非常令人沮丧的。如果没有足够的 RAM,我希望应用程序快速失败。

当然,我可以尝试一些 hack,比如分配一个我并不真正需要的大数组,然后在我真正需要内存之前将其设置为 null,但这并不理想,因为它实际上可能会导致进程到运行内存不足的时候它本来就够用了。理想情况下,我不想使用比需要更多的内存,但只是尽早失败,除非在我的应用程序 运行 的整个时间内可以保证一定数量。这可能吗?

您可以尝试使用 MemoryFailPoint class:

try
{
    using (new System.Runtime.MemoryFailPoint(20)) // 20 megabytes
    {
        ...
    }
}
catch (InsufficientMemoryException)
{
    ...
}