mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-30 23:18:20 +00:00
### Description Expose `OrtValue` class API as first-class citizen. Make it simular with C++ API. Enable safe direct native memory access. Make string tensor manipulation more efficient. Avoid intermediate structures such as `NamedOnnxValue`, `DisposableNamedOnnxvalue` and etc. Provide more examples with `IOBinding`, although `OrtValue` API potentially makes `IOBinding` redundant for most of scenarios, since `OrtValue` can be created on top of any memory. Run all the pre-trained models now with `OrtValue` API as well. Obsolete `OrtExternalMemory class`. Obsolete IOBinding API that takes `FixedBufferOnnxValue`. ### Motivation and Context Make the API efficient and uniform with C++. This aspires to address: https://github.com/microsoft/onnxruntime/issues/14918 https://github.com/microsoft/onnxruntime/issues/15381 Cc: @Craigacp
42 lines
1.5 KiB
C#
42 lines
1.5 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
using System;
|
|
using System.Runtime.CompilerServices;
|
|
|
|
namespace Microsoft.ML.OnnxRuntime
|
|
{
|
|
class NativeApiStatus
|
|
{
|
|
private static string GetErrorMessage(IntPtr /*(ONNXStatus*)*/status)
|
|
{
|
|
// nativeString belongs to status, no need for separate release
|
|
IntPtr nativeString = NativeMethods.OrtGetErrorMessage(status);
|
|
return NativeOnnxValueHelper.StringFromNativeUtf8(nativeString);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Checks the native Status if the errocode is OK/Success. Otherwise constructs an appropriate exception and throws.
|
|
/// Releases the native status object, as needed.
|
|
/// </summary>
|
|
/// <param name="nativeStatus"></param>
|
|
/// <throws></throws>
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void VerifySuccess(IntPtr nativeStatus)
|
|
{
|
|
if (nativeStatus != IntPtr.Zero)
|
|
{
|
|
try
|
|
{
|
|
ErrorCode statusCode = NativeMethods.OrtGetErrorCode(nativeStatus);
|
|
string errorMessage = GetErrorMessage(nativeStatus);
|
|
throw new OnnxRuntimeException(statusCode, errorMessage);
|
|
}
|
|
finally
|
|
{
|
|
NativeMethods.OrtReleaseStatus(nativeStatus);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|