mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-26 22:35:43 +00:00
82 lines
No EOL
2.2 KiB
C#
82 lines
No EOL
2.2 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
using System;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.InteropServices;
|
|
using System.Collections.Generic;
|
|
|
|
|
|
namespace Microsoft.ML.OnnxRuntime
|
|
{
|
|
internal struct GlobalOptions //Options are currently not accessible to user
|
|
{
|
|
public string LogId { get; set; }
|
|
public LogLevel LogLevel { get; set; }
|
|
}
|
|
|
|
internal enum LogLevel
|
|
{
|
|
Verbose = 0,
|
|
Info = 1,
|
|
Warning = 2,
|
|
Error = 3,
|
|
Fatal = 4
|
|
}
|
|
|
|
/// <summary>
|
|
/// This class intializes the process-global ONNX runtime
|
|
/// C# API users do not need to access this, thus kept as internal
|
|
/// </summary>
|
|
internal sealed class OnnxRuntime : SafeHandle
|
|
{
|
|
private static readonly Lazy<OnnxRuntime> _instance = new Lazy<OnnxRuntime>(()=> new OnnxRuntime());
|
|
|
|
internal static IntPtr Handle // May throw exception in every access, if the constructor have thrown an exception
|
|
{
|
|
get
|
|
{
|
|
return _instance.Value.handle;
|
|
}
|
|
}
|
|
|
|
public override bool IsInvalid
|
|
{
|
|
get
|
|
{
|
|
return (handle == IntPtr.Zero);
|
|
}
|
|
}
|
|
|
|
private OnnxRuntime() //Problem: it is not possible to pass any option for a Singleton
|
|
:base(IntPtr.Zero, true)
|
|
{
|
|
handle = IntPtr.Zero;
|
|
try
|
|
{
|
|
NativeApiStatus.VerifySuccess(NativeMethods.ONNXRuntimeInitialize(LogLevel.Warning, @"CSharpOnnxRuntime", out handle));
|
|
}
|
|
catch (OnnxRuntimeException e)
|
|
{
|
|
if (handle != IntPtr.Zero)
|
|
{
|
|
Delete(handle);
|
|
handle = IntPtr.Zero;
|
|
}
|
|
throw e;
|
|
}
|
|
|
|
}
|
|
|
|
private static void Delete(IntPtr nativePtr)
|
|
{
|
|
NativeMethods.ReleaseONNXEnv(nativePtr);
|
|
}
|
|
|
|
protected override bool ReleaseHandle()
|
|
{
|
|
Delete(handle);
|
|
return true;
|
|
}
|
|
}
|
|
} |