From 0638edbbbb5b6a3aa09f5272ce879b1bf3903dee Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 13 三月 2026 12:35:57 +0800
Subject: [PATCH] fix: improve memory region code quality
---
Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs | 31 ++++++++++++++++++++++++++++---
Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Interfaces/IMemoryRegion.cs | 2 +-
2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Interfaces/IMemoryRegion.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Interfaces/IMemoryRegion.cs
index 990ecf5..88b6606 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Interfaces/IMemoryRegion.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Interfaces/IMemoryRegion.cs
@@ -3,7 +3,7 @@
/// <summary>
/// 鍐呭瓨鍖哄煙鎺ュ彛
/// </summary>
- public interface IMemoryRegion
+ public interface IMemoryRegion : IDisposable
{
/// <summary>
/// 鍖哄煙绫诲瀷锛圡/DB/I/Q/T/C锛�
diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs
index a564cbb..6ebd64c 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Memory/MemoryRegion.cs
@@ -19,6 +19,11 @@
protected readonly ReaderWriterLockSlim _lock;
/// <summary>
+ /// 閲婃斁鐘舵�佹爣蹇�
+ /// </summary>
+ protected bool _disposed = false;
+
+ /// <summary>
/// 鍖哄煙绫诲瀷
/// </summary>
public abstract string RegionType { get; }
@@ -36,7 +41,7 @@
{
Size = size;
_memory = new byte[size];
- _lock = new ReaderWriterLockSlim();
+ _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
}
/// <summary>
@@ -66,6 +71,9 @@
/// </summary>
public virtual void Write(ushort offset, byte[] data)
{
+ if (data == null)
+ throw new ArgumentNullException(nameof(data));
+
_lock.EnterWriteLock();
try
{
@@ -100,9 +108,26 @@
/// <summary>
/// 閲婃斁璧勬簮
/// </summary>
- public virtual void Dispose()
+ public void Dispose()
{
- _lock?.Dispose();
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ /// <summary>
+ /// 閲婃斁璧勬簮
+ /// </summary>
+ /// <param name="disposing">鏄惁姝e湪閲婃斁鎵樼璧勬簮</param>
+ protected virtual void Dispose(bool disposing)
+ {
+ if (!_disposed)
+ {
+ if (disposing)
+ {
+ _lock?.Dispose();
+ }
+ _disposed = true;
+ }
}
}
}
--
Gitblit v1.9.3