Browse Source

Refactored DisposableObject

tags/v0.12
Eli Belash 6 years ago
parent
commit
891346e4e3
11 changed files with 44 additions and 42 deletions
  1. +1
    -1
      src/TensorFlowNET.Core/APIs/c_api.cs
  2. +5
    -9
      src/TensorFlowNET.Core/Binding.Util.cs
  3. +1
    -1
      src/TensorFlowNET.Core/Buffers/Buffer.cs
  4. +23
    -18
      src/TensorFlowNET.Core/DisposableObject.cs
  5. +2
    -1
      src/TensorFlowNET.Core/Eager/ContextOptions.cs
  6. +2
    -2
      src/TensorFlowNET.Core/Graphs/Graph.cs
  7. +1
    -1
      src/TensorFlowNET.Core/Graphs/ImportGraphDefOptions.cs
  8. +1
    -1
      src/TensorFlowNET.Core/Sessions/BaseSession.cs
  9. +1
    -1
      src/TensorFlowNET.Core/Sessions/SessionOptions.cs
  10. +3
    -3
      src/TensorFlowNET.Core/Status/Status.cs
  11. +4
    -4
      src/TensorFlowNET.Core/Tensors/Tensor.cs

+ 1
- 1
src/TensorFlowNET.Core/APIs/c_api.cs View File

@@ -59,6 +59,6 @@ namespace Tensorflow
}

[DllImport(TensorFlowLibName)]
public static unsafe extern IntPtr TF_Version();
public static extern IntPtr TF_Version();
}
}

+ 5
- 9
src/TensorFlowNET.Core/Binding.Util.cs View File

@@ -308,15 +308,14 @@ namespace Tensorflow
public static IEnumerable TupleToEnumerable(object tuple)
{
Type t = tuple.GetType();
if(t.IsGenericType && (t.FullName.StartsWith("System.Tuple") || t.FullName.StartsWith("System.ValueTuple")))
if (t.IsGenericType && (t.FullName.StartsWith("System.Tuple") || t.FullName.StartsWith("System.ValueTuple")))
{
var flds = t.GetFields();
for(int i = 0; i < flds.Length;i++)
for (int i = 0; i < flds.Length; i++)
{
yield return flds[i].GetValue(tuple);
}
}
else
} else
{
throw new System.Exception("Expected Tuple.");
}
@@ -329,12 +328,9 @@ namespace Tensorflow

public static bool isinstance(object Item1, object tuple)
{
var tup = TupleToEnumerable(tuple);
foreach(var t in tup)
{
if(isinstance(Item1, (Type)t))
foreach (var t in TupleToEnumerable(tuple))
if (isinstance(Item1, (Type) t))
return true;
}
return false;
}
}


+ 1
- 1
src/TensorFlowNET.Core/Buffers/Buffer.cs View File

@@ -66,7 +66,7 @@ namespace Tensorflow
return buffer.Data;
}

protected override void DisposeUnManagedState(IntPtr handle)
protected override void DisposeUnmanagedResources(IntPtr handle)
=> c_api.TF_DeleteBuffer(handle);
}
}

+ 23
- 18
src/TensorFlowNET.Core/DisposableObject.cs View File

@@ -29,49 +29,54 @@ namespace Tensorflow

protected DisposableObject() { }

public DisposableObject(IntPtr handle)
{
_handle = handle;
}

protected virtual void DisposeManagedState()
{
}

protected abstract void DisposeUnManagedState(IntPtr handle);
protected DisposableObject(IntPtr handle)
=> _handle = handle;

protected virtual void Dispose(bool disposing)
private void internal_dispose(bool disposing)
{
if (disposing)
{
// dispose managed state (managed objects).
DisposeManagedResources();

// free unmanaged resources (unmanaged objects) and override a finalizer below.
if (_handle != IntPtr.Zero)
{
// dispose managed state (managed objects).
DisposeManagedState();

// set large fields to null.
DisposeUnManagedState(_handle);
DisposeUnmanagedResources(_handle);

_handle = IntPtr.Zero;
}
}
}

/// <summary>
/// Dispose any managed resources.
/// </summary>
/// <remarks>Equivalent to what you would perform inside <see cref="Dispose()"/></remarks>
protected virtual void DisposeManagedResources()
{
}

/// <summary>
/// Dispose any unmanaged resources related to given <paramref name="handle"/>.
/// </summary>
protected abstract void DisposeUnmanagedResources(IntPtr handle);

// override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
~DisposableObject()
{
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
Dispose(false);
internal_dispose(false);
}

// This code added to correctly implement the disposable pattern.
public void Dispose()
{
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
Dispose(true);
internal_dispose(true);
// uncomment the following line if the finalizer is overridden above.
GC.SuppressFinalize(this);
}
}
}
}

+ 2
- 1
src/TensorFlowNET.Core/Eager/ContextOptions.cs View File

@@ -1,8 +1,9 @@
using System;
using System.IO;

namespace Tensorflow.Eager
{
public class ContextOptions : IDisposable
public class ContextOptions : IDisposable //TODO! Eli: Shouldn't this inherieting DisposableObject?
{
private IntPtr _handle;



+ 2
- 2
src/TensorFlowNET.Core/Graphs/Graph.cs View File

@@ -439,12 +439,12 @@ namespace Tensorflow
_unfetchable_ops.Add(op);
}
protected override void DisposeManagedState()
protected override void DisposeManagedResources()
{
ops.default_graph_stack.remove(this);
}
protected override void DisposeUnManagedState(IntPtr handle)
protected override void DisposeUnmanagedResources(IntPtr handle)
{
c_api.TF_DeleteGraph(handle);
}


+ 1
- 1
src/TensorFlowNET.Core/Graphs/ImportGraphDefOptions.cs View File

@@ -37,7 +37,7 @@ namespace Tensorflow
c_api.TF_ImportGraphDefOptionsAddReturnOutput(_handle, name, index);
}

protected override void DisposeUnManagedState(IntPtr handle)
protected override void DisposeUnmanagedResources(IntPtr handle)
=> c_api.TF_DeleteImportGraphDefOptions(handle);

public static implicit operator IntPtr(ImportGraphDefOptions opts) => opts._handle;


+ 1
- 1
src/TensorFlowNET.Core/Sessions/BaseSession.cs View File

@@ -396,7 +396,7 @@ namespace Tensorflow
Dispose();
}
protected override void DisposeUnManagedState(IntPtr handle)
protected override void DisposeUnmanagedResources(IntPtr handle)
{
using (var status = new Status())
{


+ 1
- 1
src/TensorFlowNET.Core/Sessions/SessionOptions.cs View File

@@ -32,7 +32,7 @@ namespace Tensorflow
_handle = handle;
}

protected override void DisposeUnManagedState(IntPtr handle)
protected override void DisposeUnmanagedResources(IntPtr handle)
=> c_api.TF_DeleteSessionOptions(handle);

public void SetConfig(ConfigProto config)


+ 3
- 3
src/TensorFlowNET.Core/Status/Status.cs View File

@@ -50,7 +50,7 @@ namespace Tensorflow
/// </summary>
public void Check(bool throwException = false)
{
if(Code != TF_Code.TF_OK)
if (Code != TF_Code.TF_OK)
{
Console.WriteLine(Message);
if (throwException)
@@ -65,7 +65,7 @@ namespace Tensorflow
return status._handle;
}

protected override void DisposeUnManagedState(IntPtr handle)
protected override void DisposeUnmanagedResources(IntPtr handle)
=> c_api.TF_DeleteStatus(handle);
}
}
}

+ 4
- 4
src/TensorFlowNET.Core/Tensors/Tensor.cs View File

@@ -392,11 +392,11 @@ namespace Tensorflow
return $"tf.Tensor '{name}' shape=({string.Join(",", shape)}) dtype={dtype}";
}

protected override void DisposeManagedState()
{
}
//protected override void DisposeManagedState()
//{
//}

protected override void DisposeUnManagedState(IntPtr handle)
protected override void DisposeUnmanagedResources(IntPtr handle)
{
if(handle != IntPtr.Zero)
{


Loading…
Cancel
Save