Type.InvokeMember() и большие массивы данных...
От: dmibr  
Дата: 08.12.09 14:08
Оценка:
Не подскажите, что можно сделать в следующей ситуации.
Есть примерно следующий код вызова метода COM-объекта.

    object[,] report ;
    object[] args = {"Argument 1",  10, report };
    ParameterModifier p = new ParameterModifier(3);
    // Pass the first and third parameters by reference.
    p[2] = true;
    ParameterModifier[] mods = { p };

    // Invoke the method late bound.
    obj.GetType().InvokeMember("GetReport", BindingFlags.InvokeMethod,
         null, obj, args, mods, null, null);


Последний параметр в массиве args – двумерный массив, который передается в метод "GetReport" по ссылке.
Проблема в следующем: в среднем этот массив args[2] после удачной отработки метода содержит 250000 элементов (типы столбцов массива от string до double). Но если метод пытается вернуть более 300000 элементов, возникает TargetInvocationException. Перехват этого исключения и просмотр его свойства InnerException говорит о том, что возникает OutOfMemoryException. Как я понимаю, это исключение, которое выбрасывается при недостаточном объеме памяти для выполнения метода через Late Binding.
При вызове того же метода через раннее связывание – никаких исключений не возникает.
Вопрос – как мне вызвать метод через позднее связывание, в котором в один из параметров принимает ссылку на большой массив данных?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.