SftpClientBenchmark.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System.Text;
  2. using BenchmarkDotNet.Attributes;
  3. using Renci.SshNet.IntegrationTests.TestsFixtures;
  4. using Renci.SshNet.Sftp;
  5. namespace Renci.SshNet.IntegrationBenchmarks
  6. {
  7. [MemoryDiagnoser]
  8. [SimpleJob]
  9. public class SftpClientBenchmark : IntegrationBenchmarkBase
  10. {
  11. private readonly InfrastructureFixture _infrastructureFixture;
  12. private readonly string _file = $"/tmp/{Guid.NewGuid()}.txt";
  13. private SftpClient? _sftpClient;
  14. private MemoryStream? _uploadStream;
  15. public SftpClientBenchmark()
  16. {
  17. _infrastructureFixture = InfrastructureFixture.Instance;
  18. }
  19. [GlobalSetup]
  20. public async Task Setup()
  21. {
  22. await GlobalSetup().ConfigureAwait(false);
  23. _sftpClient = new SftpClient(_infrastructureFixture.SshServerHostName, _infrastructureFixture.SshServerPort, _infrastructureFixture.User.UserName, _infrastructureFixture.User.Password);
  24. await _sftpClient.ConnectAsync(CancellationToken.None).ConfigureAwait(false);
  25. var fileContent = "File content !@#$%^&*()_+{}:,./<>[];'\\|";
  26. _uploadStream = new MemoryStream(Encoding.UTF8.GetBytes(fileContent));
  27. }
  28. [GlobalCleanup]
  29. public async Task Cleanup()
  30. {
  31. await GlobalCleanup().ConfigureAwait(false);
  32. await _uploadStream!.DisposeAsync().ConfigureAwait(false);
  33. }
  34. [Benchmark]
  35. public void Connect()
  36. {
  37. using var sftpClient = new SftpClient(_infrastructureFixture.SshServerHostName, _infrastructureFixture.SshServerPort, _infrastructureFixture.User.UserName, _infrastructureFixture.User.Password);
  38. sftpClient.Connect();
  39. }
  40. [Benchmark]
  41. public async Task ConnectAsync()
  42. {
  43. using var sftpClient = new SftpClient(_infrastructureFixture.SshServerHostName, _infrastructureFixture.SshServerPort, _infrastructureFixture.User.UserName, _infrastructureFixture.User.Password);
  44. await sftpClient.ConnectAsync(CancellationToken.None).ConfigureAwait(false);
  45. }
  46. public IEnumerable<ISftpFile> ListDirectory()
  47. {
  48. return _sftpClient!.ListDirectory("/root");
  49. }
  50. public IAsyncEnumerable<ISftpFile> ListDirectoryAsync()
  51. {
  52. return _sftpClient!.ListDirectoryAsync("/root", CancellationToken.None);
  53. }
  54. [Benchmark]
  55. public string UploadAndDownload()
  56. {
  57. _uploadStream!.Position = 0;
  58. _sftpClient!.UploadFile(_uploadStream, _file);
  59. using var downloadStream = new MemoryStream();
  60. _sftpClient.DownloadFile(_file, downloadStream);
  61. return Encoding.UTF8.GetString(downloadStream.ToArray());
  62. }
  63. }
  64. }