我有2Gb image.gz
的图像。现在我正在执行以下步骤以在目标计算机上获取解压缩的image.gz
:
image.gz
上传Renci.SshNet.ScpClient
。Renci.SshNet.SshCommand
来解压缩文件。这两个步骤大约需要4分钟才能完成,我想加快这个过程。
如果我可以使用简单的命令行,我只需编写以下命令:
cat image.gz | ssh 10.70.0.1 "gunzip -C - > /var/tmp/decompressed_image"
此命令在2分钟内完成,这是以前的两倍。
我试图用Renci.SSH实现这个单线程:
sshClient.Connect();
var shellStream = sshClient.CreateShellStream(
terminalName: "dumb",
columns: 80,
rows: 24,
width: 800,
height: 600,
bufferSize: 1024);
while (!shellStream.CanWrite)
{
Thread.Sleep(TimeSpan.FromSeconds(1));
}
shellStream.WriteLine("cat - | gunzip -c > /var/tmp/image.raw");
shellStream.Flush();
long totalBytes = 0;
const int bufferSize = 1024;
using (var fileStream = File.OpenRead(@"D:\images\image.gz"))
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, bufferSize))
{
var buffer = new byte[1024];
int bytesRead;
while ((bytesRead = streamReader.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
{
totalBytes += bytesRead;
if (totalBytes % Megabyte == 0)
{
Console.WriteLine(totalBytes / Megabyte);
}
while (!shellStream.CanWrite)
{
Thread.Sleep(TimeSpan.FromSeconds(1));
}
shellStream.Write(buffer, 0, bytesRead);
}
}
正如您所猜测的那样,此代码无法正常工作。这是我对如何实现这一点的唯一想法。
如果你有更好的想法(工作思路:)),请与我分享。