Сбой настройки текстового приспособления в огромном массиве

#c# #xamarin #nunit

#c# #xamarin #нанит

Вопрос:

Я пытаюсь протестировать свой метод на наличие ошибки переполнения, описанной здесь. По какой-то причине запуск теста завершается с ошибкой «Сбой TestFixtureSetUp». Вероятно, что-то не так с инициализацией массива с помощью int[int.MaxValue] . Кто-нибудь может объяснить, как это исправить?

   [TestFixture ()]
    public class FindRecursiveTest
    {

        int[] overflowArray = new int[int.MaxValue];

                [Test ()]
        public void TestOverflow ()
        {
            int[] array = overflowArray;
            int searchNumber = int.MaxValue;  
            Assert.AreEqual(-1, BinarySearcher.FindRecursive(searchNumber, array, 0,array.Length - 1), "key 0");

        }
 

Ответ №1:

Вероятно, инициализатор класса выдает OutOfMemoryException при инициализации overflowArray . Насколько я знаю, обойти это невозможно, поскольку максимальный размер объекта в .NET составляет 2 ГБ

Начиная с .NET 4.5, установив параметр, вы можете создавать массивы размером более 2 ГБ gcAllowVeryLargeObjects , но ограничение размера по-прежнему применяется к другим объектам.