У меня есть обертка API, которая имеет ряд свойств, которые инициализируются при их первом использовании. Когда вызывается метод класса Disposed
, он располагает всеми остальными классами, которые он хранит. Однако есть хорошая вероятность, что только один или два из этих других классов были инициализированы в любом случае. Если эти классы еще не инициализированы, метод Dispose
фактически завершает их инициализацию и их удаление. Это массовое ресурсоемкое и продолжительное время, но я не могу придумать способ его устранения.Только утилизировать инициализированные объекты?
Это класс.
public class SalesForceApi : ISalesForce, IDisposable
{
public Logger Logger = LogManager.GetCurrentClassLogger();
private IAccounts _accounts;
private IAttachments _attachments;
private ICases _cases;
private IContacts _contacts;
private IGroups _groups;
private IRecordTypes _recordTypes;
private IUsers _users;
public IAccounts Accounts => _accounts ?? (_accounts = new Accounts());
public IAttachments Attachments => _attachments ?? (_attachments = new Attachments());
public ICases Cases => _cases ?? (_cases = new Cases());
public IContacts Contacts => _contacts ?? (_contacts = new Contacts());
public IGroups Groups => _groups ?? (_groups = new Groups());
public IRecordTypes RecordTypes => _recordTypes ?? (_recordTypes = new RecordTypes());
public IUsers Users => _users ?? (_users = new Users());
public SalesForceApi()
{
}
public void Dispose()
{
Logger.Trace("Disposing of Acccounts...");
Accounts.Dispose();
Logger.Trace("Disposing of Attachments...");
Attachments.Dispose();
Logger.Trace("Disposing of Cases...");
Cases.Dispose();
Logger.Trace("Disposing of Contacts...");
Contacts.Dispose();
Logger.Trace("Disposing of Groups...");
Groups.Dispose();
Logger.Trace("Disposing of RecordTypes...");
RecordTypes.Dispose();
Logger.Trace("Disposing of Users...");
Users.Dispose();
}
}
И вот что в результате выглядит журнал:
SalesForceApi_v1.SalesForceApi::Disposing of Acccounts...
SalesForceApi_v1.Requests.RequestBase::Logging into SalesForce...
SalesForceApi_v1.Requests.RequestBase::SalesForce login successful!
SalesForceApi_v1.Requests.RequestBase::Logging out of SalesForce.
SalesForceApi_v1.SalesForceApi::Disposing of Attachments...
SalesForceApi_v1.Requests.RequestBase::Logging into SalesForce...
SalesForceApi_v1.Requests.RequestBase::SalesForce login successful!
SalesForceApi_v1.Requests.RequestBase::Logging out of SalesForce.
SalesForceApi_v1.SalesForceApi::Disposing of Cases...
SalesForceApi_v1.Requests.RequestBase::Logging into SalesForce...
SalesForceApi_v1.Requests.RequestBase::SalesForce login successful!
SalesForceApi_v1.Requests.RequestBase::Logging out of SalesForce.
SalesForceApi_v1.SalesForceApi::Disposing of Contacts...
SalesForceApi_v1.Requests.RequestBase::Logging out of SalesForce.
SalesForceApi_v1.SalesForceApi::Disposing of Groups...
SalesForceApi_v1.Requests.RequestBase::Logging into SalesForce...
SalesForceApi_v1.Requests.RequestBase::SalesForce login successful!
SalesForceApi_v1.Requests.RequestBase::Logging out of SalesForce.
SalesForceApi_v1.SalesForceApi::Disposing of RecordTypes...
SalesForceApi_v1.Requests.RequestBase::Logging into SalesForce...
SalesForceApi_v1.Requests.RequestBase::SalesForce login successful!
SalesForceApi_v1.Requests.RequestBase::Logging out of SalesForce.
SalesForceApi_v1.SalesForceApi::Disposing of Users...
SalesForceApi_v1.Requests.RequestBase::Logging into SalesForce...
SalesForceApi_v1.Requests.RequestBase::SalesForce login successful!
SalesForceApi_v1.Requests.RequestBase::Logging out of SalesForce.
Ой, я рефакторинг и только что заметил, что я не распоряжаюсь частными членами. –