Skip to content

Commit e0466b4

Browse files
committed
Fixed problem with memory.
1 parent 184572b commit e0466b4

File tree

3 files changed

+26
-74
lines changed

3 files changed

+26
-74
lines changed

TorchSharp/Data/DataIterator.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ protected override void Dispose(bool disposing)
7171

7272
protected HType handle;
7373

74-
protected IEnumerator<(ITorchTensor<TData> data, ITorchTensor<TTarget> target)> @enum = null;
75-
7674
/// <summary>
7775
/// Constructor.
7876
/// </summary>
@@ -124,9 +122,9 @@ public long Size()
124122
/// <returns></returns>
125123
public IEnumerator<(ITorchTensor<TData> data, ITorchTensor<TTarget> target)> GetEnumerator()
126124
{
127-
@enum?.Reset();
128-
@enum = @enum ?? new DataIteratorEnumerator(this);
129-
return @enum;
125+
var iter = new DataIteratorEnumerator(this);
126+
iter.Reset();
127+
return iter;
130128
}
131129

132130

TorchSharp/Generated/TorchTensor.generated.cs

Lines changed: 19 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ public class ByteTensor : ITorchTensor<byte>
2020

2121
internal sealed class HType : SafeHandle
2222
{
23-
internal bool shouldClean = true;
24-
2523
public HType(IntPtr preexistingHandle, bool ownsHandle) : base(IntPtr.Zero, ownsHandle)
2624
{
2725
SetHandle(preexistingHandle);
@@ -36,12 +34,7 @@ internal HType() : base(IntPtr.Zero, true)
3634

3735
protected override bool ReleaseHandle()
3836
{
39-
// var atenTensor = new AtenSharp.ByteTensor(THS_getTHTensorUnsafe(this));
40-
// atenTensor.Dispose();
41-
if (shouldClean)
42-
{
43-
THS_Delete (this);
44-
}
37+
THS_Delete (this);
4538
return true;
4639
}
4740

@@ -56,10 +49,9 @@ protected override void Dispose(bool disposing)
5649

5750
internal HType handle;
5851

59-
internal ByteTensor(HType handle, bool shouldClean = true)
52+
internal ByteTensor(HType handle)
6053
{
6154
this.handle = handle;
62-
this.handle.shouldClean = shouldClean;
6355
}
6456

6557
/// <summary>
@@ -328,8 +320,6 @@ public class ShortTensor : ITorchTensor<short>
328320

329321
internal sealed class HType : SafeHandle
330322
{
331-
internal bool shouldClean = true;
332-
333323
public HType(IntPtr preexistingHandle, bool ownsHandle) : base(IntPtr.Zero, ownsHandle)
334324
{
335325
SetHandle(preexistingHandle);
@@ -344,12 +334,7 @@ internal HType() : base(IntPtr.Zero, true)
344334

345335
protected override bool ReleaseHandle()
346336
{
347-
// var atenTensor = new AtenSharp.ShortTensor(THS_getTHTensorUnsafe(this));
348-
// atenTensor.Dispose();
349-
if (shouldClean)
350-
{
351-
THS_Delete (this);
352-
}
337+
THS_Delete (this);
353338
return true;
354339
}
355340

@@ -364,10 +349,9 @@ protected override void Dispose(bool disposing)
364349

365350
internal HType handle;
366351

367-
internal ShortTensor(HType handle, bool shouldClean = true)
352+
internal ShortTensor(HType handle)
368353
{
369354
this.handle = handle;
370-
this.handle.shouldClean = shouldClean;
371355
}
372356

373357
/// <summary>
@@ -636,8 +620,6 @@ public class IntTensor : ITorchTensor<int>
636620

637621
internal sealed class HType : SafeHandle
638622
{
639-
internal bool shouldClean = true;
640-
641623
public HType(IntPtr preexistingHandle, bool ownsHandle) : base(IntPtr.Zero, ownsHandle)
642624
{
643625
SetHandle(preexistingHandle);
@@ -652,12 +634,7 @@ internal HType() : base(IntPtr.Zero, true)
652634

653635
protected override bool ReleaseHandle()
654636
{
655-
// var atenTensor = new AtenSharp.IntTensor(THS_getTHTensorUnsafe(this));
656-
// atenTensor.Dispose();
657-
if (shouldClean)
658-
{
659-
THS_Delete (this);
660-
}
637+
THS_Delete (this);
661638
return true;
662639
}
663640

@@ -672,10 +649,9 @@ protected override void Dispose(bool disposing)
672649

673650
internal HType handle;
674651

675-
internal IntTensor(HType handle, bool shouldClean = true)
652+
internal IntTensor(HType handle)
676653
{
677654
this.handle = handle;
678-
this.handle.shouldClean = shouldClean;
679655
}
680656

681657
/// <summary>
@@ -944,8 +920,6 @@ public class LongTensor : ITorchTensor<long>
944920

945921
internal sealed class HType : SafeHandle
946922
{
947-
internal bool shouldClean = true;
948-
949923
public HType(IntPtr preexistingHandle, bool ownsHandle) : base(IntPtr.Zero, ownsHandle)
950924
{
951925
SetHandle(preexistingHandle);
@@ -960,12 +934,7 @@ internal HType() : base(IntPtr.Zero, true)
960934

961935
protected override bool ReleaseHandle()
962936
{
963-
// var atenTensor = new AtenSharp.LongTensor(THS_getTHTensorUnsafe(this));
964-
// atenTensor.Dispose();
965-
if (shouldClean)
966-
{
967-
THS_Delete (this);
968-
}
937+
THS_Delete (this);
969938
return true;
970939
}
971940

@@ -980,10 +949,9 @@ protected override void Dispose(bool disposing)
980949

981950
internal HType handle;
982951

983-
internal LongTensor(HType handle, bool shouldClean = true)
952+
internal LongTensor(HType handle)
984953
{
985954
this.handle = handle;
986-
this.handle.shouldClean = shouldClean;
987955
}
988956

989957
/// <summary>
@@ -1252,8 +1220,6 @@ public class DoubleTensor : ITorchTensor<double>
12521220

12531221
internal sealed class HType : SafeHandle
12541222
{
1255-
internal bool shouldClean = true;
1256-
12571223
public HType(IntPtr preexistingHandle, bool ownsHandle) : base(IntPtr.Zero, ownsHandle)
12581224
{
12591225
SetHandle(preexistingHandle);
@@ -1268,12 +1234,7 @@ internal HType() : base(IntPtr.Zero, true)
12681234

12691235
protected override bool ReleaseHandle()
12701236
{
1271-
// var atenTensor = new AtenSharp.DoubleTensor(THS_getTHTensorUnsafe(this));
1272-
// atenTensor.Dispose();
1273-
if (shouldClean)
1274-
{
1275-
THS_Delete (this);
1276-
}
1237+
THS_Delete (this);
12771238
return true;
12781239
}
12791240

@@ -1288,10 +1249,9 @@ protected override void Dispose(bool disposing)
12881249

12891250
internal HType handle;
12901251

1291-
internal DoubleTensor(HType handle, bool shouldClean = true)
1252+
internal DoubleTensor(HType handle)
12921253
{
12931254
this.handle = handle;
1294-
this.handle.shouldClean = shouldClean;
12951255
}
12961256

12971257
/// <summary>
@@ -1560,8 +1520,6 @@ public class FloatTensor : ITorchTensor<float>
15601520

15611521
internal sealed class HType : SafeHandle
15621522
{
1563-
internal bool shouldClean = true;
1564-
15651523
public HType(IntPtr preexistingHandle, bool ownsHandle) : base(IntPtr.Zero, ownsHandle)
15661524
{
15671525
SetHandle(preexistingHandle);
@@ -1576,12 +1534,7 @@ internal HType() : base(IntPtr.Zero, true)
15761534

15771535
protected override bool ReleaseHandle()
15781536
{
1579-
// var atenTensor = new AtenSharp.FloatTensor(THS_getTHTensorUnsafe(this));
1580-
// atenTensor.Dispose();
1581-
if (shouldClean)
1582-
{
1583-
THS_Delete (this);
1584-
}
1537+
THS_Delete (this);
15851538
return true;
15861539
}
15871540

@@ -1596,10 +1549,9 @@ protected override void Dispose(bool disposing)
15961549

15971550
internal HType handle;
15981551

1599-
internal FloatTensor(HType handle, bool shouldClean = true)
1552+
internal FloatTensor(HType handle)
16001553
{
16011554
this.handle = handle;
1602-
this.handle.shouldClean = shouldClean;
16031555
}
16041556

16051557
/// <summary>
@@ -1866,33 +1818,33 @@ internal enum ATenScalarMapping : short
18661818

18671819
public static class TensorExtensionMethods
18681820
{
1869-
internal static ITorchTensor<T> ToTorchTensor<T>(this IntPtr rawTensor, bool shouldClean = true)
1821+
internal static ITorchTensor<T> ToTorchTensor<T>(this IntPtr rawTensor)
18701822
{
18711823
switch (true)
18721824
{
18731825
case bool _ when typeof(T) == typeof(byte):
18741826
{
1875-
return (ITorchTensor<T>)new ByteTensor(new ByteTensor.HType(rawTensor, true), shouldClean);
1827+
return (ITorchTensor<T>)new ByteTensor(new ByteTensor.HType(rawTensor, true));
18761828
}
18771829
case bool _ when typeof(T) == typeof(short):
18781830
{
1879-
return (ITorchTensor<T>)new ShortTensor(new ShortTensor.HType(rawTensor, true), shouldClean);
1831+
return (ITorchTensor<T>)new ShortTensor(new ShortTensor.HType(rawTensor, true));
18801832
}
18811833
case bool _ when typeof(T) == typeof(int):
18821834
{
1883-
return (ITorchTensor<T>)new IntTensor(new IntTensor.HType(rawTensor, true), shouldClean);
1835+
return (ITorchTensor<T>)new IntTensor(new IntTensor.HType(rawTensor, true));
18841836
}
18851837
case bool _ when typeof(T) == typeof(long):
18861838
{
1887-
return (ITorchTensor<T>)new LongTensor(new LongTensor.HType(rawTensor, true), shouldClean);
1839+
return (ITorchTensor<T>)new LongTensor(new LongTensor.HType(rawTensor, true));
18881840
}
18891841
case bool _ when typeof(T) == typeof(double):
18901842
{
1891-
return (ITorchTensor<T>)new DoubleTensor(new DoubleTensor.HType(rawTensor, true), shouldClean);
1843+
return (ITorchTensor<T>)new DoubleTensor(new DoubleTensor.HType(rawTensor, true));
18921844
}
18931845
case bool _ when typeof(T) == typeof(float):
18941846
{
1895-
return (ITorchTensor<T>)new FloatTensor(new FloatTensor.HType(rawTensor, true), shouldClean);
1847+
return (ITorchTensor<T>)new FloatTensor(new FloatTensor.HType(rawTensor, true));
18961848
}
18971849
default: throw new NotImplementedException($"Creating tensor of type {typeof(T)} is not supported.");
18981850
}

TorchSharp/Generated/TorchTensor.tt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ foreach (var type in TorchTypeDef.Types) {
2222
[DllImport("LibTorchSharp")]
2323
extern static AtenSharp.<#=type.Name#>Tensor.HType THS_getTHTensorUnsafe(HType handle);
2424

25+
[DllImport("LibTorchSharp")]
26+
extern static void THS_Delete(HType handle);
27+
2528
internal sealed class HType : SafeHandle
2629
{
2730
public HType(<#=type.Ptr#> preexistingHandle, bool ownsHandle) : base(<#=type.Ptr#>.Zero, ownsHandle)
@@ -38,8 +41,7 @@ foreach (var type in TorchTypeDef.Types) {
3841

3942
protected override bool ReleaseHandle()
4043
{
41-
var atenTensor = new AtenSharp.<#=type.Name#>Tensor(THS_getTHTensorUnsafe(this));
42-
atenTensor.Dispose();
44+
THS_Delete (this);
4345
return true;
4446
}
4547

0 commit comments

Comments
 (0)