У меня есть приложение, которое использует сервис Google Drive с использованием C # SDK. Я использую учетные данные учетной записи службы, с олицетворением, чтобы указать пользователя, от имени которого я действую.
Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно создать новый DriveService для каждого олицетворенного пользователя, и каждый из этих объектов DriveService создает 2 объекта HttpConnection, которые НЕ очищаются при удалении () Dis Drive () DriveService. Я сделал это в модульном тесте. Я создаю DriveService в этом методе:
public DriveService GetDriveService(string email)
{
var serviceAccountEmail = "service account email";
var privateKey = "private key";
var serviceAcctCreds = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
User = email,
Scopes = "scopes" }),
}.FromPrivateKey(privateKey));
var driveService = new DriveService(new BaseClientService.Initializer
{
HttpClientInitializer = serviceAcctCreds,
ApplicationName = "app name",
});
return driveService;
}
Тогда используйте это так:
public async Task DoTheGDriveMemoryTest()
{
var userEmails = new List<string>
{
"email1@example.com", "email2@example.com"
};
var i = 1;
while (true)
{
foreach (var email in userEmails)
{
//recommend using Fiddler Autoresponders here
using (var service = GetDriveService(email))
{
var request = service.Changes.List("delta id");
try
{
var result = await request.ExecuteAsync();
}
catch (Exception e)
{
//do nothing
}
}
}
}
}
Это приводит к тому, что в памяти хранится постоянно растущее количество объектов HttpConnection, которые не очищаются сборщиком мусора.