Не подскажите, что можно сделать в следующей ситуации.
Есть примерно следующий код вызова метода 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.
При вызове того же метода через раннее связывание – никаких исключений не возникает.
Вопрос – как мне вызвать метод через позднее связывание, в котором в один из параметров принимает ссылку на большой массив данных?