exponenta event banner

Обработка ошибок и управление ресурсами

При создании приложения .NET рекомендуется правильно обрабатывать ошибки времени выполнения и управлять ресурсами.

Обработка ошибок

Как и в случае управляемого кода, любые ошибки, возникающие во время выполнения функции MATLAB ® или во время преобразования данных, сигнализируются стандартным исключением .NET.

Как и любое другое приложение .NET, приложение, вызывающее метод, созданный SDK™ продуктом MATLAB Compiler, может обрабатывать ошибки одним из следующих способов:

  • Локальный захват и обработка особой ситуации

  • Разрешение метода вызова перехватывать его

Ниже приведены примеры для каждого способа обработки ошибок.

В GetPrimes например, метод сам обрабатывает исключение.

public double[] GetPrimes(int n)
{
	MWArray primes= null;
	MyPrimesClass myPrimesClass= null;
	try
	 {
			myPrimesClass= new MyPrimesClass();
			primes= myPrimesClass.myprimes((double)n);
			return (double[])(MWNumericArray)primes).
						  ToVector(MWArrayComponent.Real);
	 }
	catch (Exception ex)
	 {
		Console.WriteLine("Exception: {0}", ex);
		return new double[0];
	 }
}

В следующем примере метод, вызывающий myprimes не перехватывает исключение. Вместо этого используется метод вызова (то есть метод, вызывающий метод, вызывающий myprimes) обрабатывает исключение.

public double[] GetPrimes(int n) 
{ 
   MWArray primes= null; 
   MyPrimesClass myPrimesClass= null; 
   try 
     { 
        myPrimesClass= new MyPrimesClass(); 
        primes= myPrimesClass.myprimes((double)n); 
        return (double[])(MWNumericArray)primes). 
        ToVector(MWArrayComponent.Real); 
     } 

   catch (Exception e) 
     { 
        throw; 
     } 
} 

Явное освобождение ресурсов

Обычно Dispose метод вызывается из finally раздел в try-finally блок, как показано в следующем примере:

try
	{
	  /* Allocate a huge array */
	  MWNumericArray array = new MWNumericArray(1000,1000);
		.
		.  (use the array)
		.
	}
finally
	{
	  /* Explicitly dispose of the managed array and its */
	  /* native resources */
	if (null != array)
		{
		  array.Dispose();
		}
	}

Заявление array.Dispose() освобождает память, выделенную как управляемой оболочкой, так и собственным массивом MATLAB.

MWArray класс предоставляет два метода удаления: Dispose и статический метод DisposeArray. DisposeArray более общий способ заключается в том, что он распоряжается одним MWArray или массив массивов типа MWArray.