Sınıf MemoryCache İsimler adına Microsoft.Extensions.Caching.Memory Oldukça eski. Klasik çerçevede .NET Framework 4.0, Modern .NET DA .NET Core 2.1. .NET 7.0'da yeni yöntem GetCurrentStatistics()Türün nesnesi MemoryCacheStatistics Sağladığı dört kendi kendine özgü özellik ile:
Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.
using System.Runtime.Serialization.Formatters.Binary;
using ITVisions;
using Microsoft.Extensions.Caching.Memory;
namespace NET7Console;
internal class FCL_Caching
{
/// <summary>
/// Klasse für das Objekt, das in den Cache soll
/// </summary>
[Serializable]
class Developer
{
public long ID { get; set; }
public string? Name { get; set; }
public string? Company { get; set; }
public override string ToString()
{
return $"Developer {Name} entwickelt bei {Company}.";
}
}
/// <summary>
/// Hilfsfunktion: Ermittelt die ungefähre Größe eines
/// beliebigen .NET-Objekts per binärer Serialisierung
/// </summary>
private int GetObjectSize(object TestObject)
{
#pragma warning disable SYSLIB0011
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
byte[] Array;
bf.Serialize(ms, TestObject);
Array = ms.ToArray();
return Array.Length;
#pragma warning restore SYSLIB0011
}
public void MemoryCacheDemo()
{
CUI.H1("MemoryCacheDemo mit .NET 7.0" +
"(C) Dr. Holger Schwichtenberg 2022");
var co = new MemoryCacheOptions();
co.TrackStatistics = true;
co.SizeLimit = 1024; // hier Einheit Bytes
MemoryCache cache = new MemoryCache(co);
CUI.PrintStep("Ein Objekt wird für fünf Sekunden" +
"in den Zwischenspeicher gelegt");
var d = new Developer() {
ID = 123,
Name = "Dr. Holger Schwichtenberg",
Company = "MAXIMAGO GmbH" };
Console.WriteLine(d);
var g = GetObjectSize(d);
Console.WriteLine("Größe des Objekts: " + g);
var ceo = new MemoryCacheEntryOptions();
ceo.Size = g;
ceo.AbsoluteExpiration = DateTime.Now.AddSeconds(5);
cache.Set("CurrentDeveloper", d, ceo);
CUI.PrintStep("nNun wird in einer Schleife der " +
"Zwischenspeicher zehnmal im Abstand von " +
"einer Sekunde nach dem Wert gefragt und "+
"die Statistik ausgeben.");
for (int i = 0; i < 10; i++)
{
Object result;
bool found = cache.TryGetValue("CurrentDeveloper", out result);
if (result is not null) CUI.Success(result);
else CUI.Warning("Cache ist leer!");
MemoryCacheStatistics stats = cache.GetCurrentStatistics();
Console.WriteLine(DateTime.Now);
Console.WriteLine(stats.ToNameValueString());
Console.WriteLine();
System.Threading.Thread.Sleep(1000);
var e = new FCL_MinimalEventCounterSource();
e.Write("x");
}
}
}
Yukarıdaki listenin çıktısında, ara belleğin ilk beş saniye ve sayı için depolanan geliştirici nesnesini sağladığını görebilirsiniz. TotalHits daha yüksek. Bundan sonra artık bir geliştirme konusu yok e TotalMisses Arttı.
Toplam darbeler ve kaçırılan gizemler önbellek çekimlerini veya ara bellek eksikliğini sayar.
Başka bir not: ile kullanılan boyutun değerlendirilmesi CurrentEstimatedSize Sadece ben olur MemoryCache-Mülkiyet nesnesi SizeLimit Meşguldür ve önbellekte bir nesne korunduğunda, özellikler için boyutu Size (veya yöntem SetSize()). CurrentEstimatedSize VE Size Sabit bir birimi yok. Kendinizi ölçüm birimini tanımlamanız gerekir. Yukarıdaki örnekte, baytlar varsayar.
(RME)

Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.
- CurrentEntryCount
- CurrentEstimatedSize
- TotalHits
- TotalMisses
using System.Runtime.Serialization.Formatters.Binary;
using ITVisions;
using Microsoft.Extensions.Caching.Memory;
namespace NET7Console;
internal class FCL_Caching
{
/// <summary>
/// Klasse für das Objekt, das in den Cache soll
/// </summary>
[Serializable]
class Developer
{
public long ID { get; set; }
public string? Name { get; set; }
public string? Company { get; set; }
public override string ToString()
{
return $"Developer {Name} entwickelt bei {Company}.";
}
}
/// <summary>
/// Hilfsfunktion: Ermittelt die ungefähre Größe eines
/// beliebigen .NET-Objekts per binärer Serialisierung
/// </summary>
private int GetObjectSize(object TestObject)
{
#pragma warning disable SYSLIB0011
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
byte[] Array;
bf.Serialize(ms, TestObject);
Array = ms.ToArray();
return Array.Length;
#pragma warning restore SYSLIB0011
}
public void MemoryCacheDemo()
{
CUI.H1("MemoryCacheDemo mit .NET 7.0" +
"(C) Dr. Holger Schwichtenberg 2022");
var co = new MemoryCacheOptions();
co.TrackStatistics = true;
co.SizeLimit = 1024; // hier Einheit Bytes
MemoryCache cache = new MemoryCache(co);
CUI.PrintStep("Ein Objekt wird für fünf Sekunden" +
"in den Zwischenspeicher gelegt");
var d = new Developer() {
ID = 123,
Name = "Dr. Holger Schwichtenberg",
Company = "MAXIMAGO GmbH" };
Console.WriteLine(d);
var g = GetObjectSize(d);
Console.WriteLine("Größe des Objekts: " + g);
var ceo = new MemoryCacheEntryOptions();
ceo.Size = g;
ceo.AbsoluteExpiration = DateTime.Now.AddSeconds(5);
cache.Set("CurrentDeveloper", d, ceo);
CUI.PrintStep("nNun wird in einer Schleife der " +
"Zwischenspeicher zehnmal im Abstand von " +
"einer Sekunde nach dem Wert gefragt und "+
"die Statistik ausgeben.");
for (int i = 0; i < 10; i++)
{
Object result;
bool found = cache.TryGetValue("CurrentDeveloper", out result);
if (result is not null) CUI.Success(result);
else CUI.Warning("Cache ist leer!");
MemoryCacheStatistics stats = cache.GetCurrentStatistics();
Console.WriteLine(DateTime.Now);
Console.WriteLine(stats.ToNameValueString());
Console.WriteLine();
System.Threading.Thread.Sleep(1000);
var e = new FCL_MinimalEventCounterSource();
e.Write("x");
}
}
}
Yukarıdaki listenin çıktısında, ara belleğin ilk beş saniye ve sayı için depolanan geliştirici nesnesini sağladığını görebilirsiniz. TotalHits daha yüksek. Bundan sonra artık bir geliştirme konusu yok e TotalMisses Arttı.

Toplam darbeler ve kaçırılan gizemler önbellek çekimlerini veya ara bellek eksikliğini sayar.
Başka bir not: ile kullanılan boyutun değerlendirilmesi CurrentEstimatedSize Sadece ben olur MemoryCache-Mülkiyet nesnesi SizeLimit Meşguldür ve önbellekte bir nesne korunduğunda, özellikler için boyutu Size (veya yöntem SetSize()). CurrentEstimatedSize VE Size Sabit bir birimi yok. Kendinizi ölçüm birimini tanımlamanız gerekir. Yukarıdaki örnekte, baytlar varsayar.
(RME)