Verwaltete/nicht verwaltete RessourcenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Verwaltete/nicht verwaltete Ressourcen

Post by Anonymous »

Nur um zu sehen, ob ich korrekt verwaltete und nicht verwaltete Ressourcen unterstreiche.

Code: Select all

public class Api:Idisposable
{
HttpClient _Client;
Public Api()
{
_Client = new HttpClient();
//Define _Client properties
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
//lot of other functions
protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)
{
_isDisposed = true;

if (disposing)
{
_Client.Dispose();
_Client = null;
}
}
}
< /code>
Also ... httpclient ist eine verwaltete Ressource, die auf den Punkt gebracht wird, dass es die Methode enthält, die ich nach dem Abschluss von mir anrufen muss. Wenn ich das nicht tue, wird mein _client -Objekt eine unmanagierte Ressource.Api _Example = new Api();
_Example.function1();
_Example.Function2();
< /code>
Im obigen Code wird der _client in api niemals aufgerufen, so dass er nicht verwaltet wurde? Und um es verwaltet zu machen, muss ich api.dispose () hinzufügen (), nachdem ich es beendet habe?using (Api _Example = new Api())
{
_Example.function1();
_Example.Function2();
}
< /code>
Anweisung "Verwenden" standardmäßig tätigt ein Aufruf an api.dispon (), der _client aus dem Gedächtnis automatisch veröffentlicht wird. API mit unterschiedlichen Endpunkten für verschiedene Schweinswale. Ich finde es also einfacher zu lesen (alle Kommentare dazu sind auch willkommen) < /p>
public class AnotherAnotherClass
{
private void ApiCall()
{
using (Api _Api = new Api())
{
_Api.DummyExample();
}
}
}

public class Api : IDisposable
{
HttpClient _Client;
public Api()
{
_Client = new HttpClient();
//Define _Client properties
}
protected void DummyExample()
{
bool Continue = true;
string EndPoint;
while (Continue)
{
EndPoint = //change based in alot of options
HttpResponseMessage Response = _Client.GetAsync(_Client.BaseAddress + EndPoint).Result;
if (Response.IsSuccessStatusCode)
{
AnotherClass ResultApi = JsonConvert.DeserializeObject(Response.Content.ReadAsStringAsync().Result);
if (PrecioAPI.Count == 0)
{
Continue = false;
}
}
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post