Status: Fixed After a lot of work, I have now re-written the entire SharpRSync library. My tests indicate that generating a diff file for an 8gb file took 10 minutes before, and now takes 8 minutes. A delta for the same (unchanged) 8GB file took 58 minutes, and now takes 7 minutes. The implementation seems to run faster under 64 bit, but I'm unsure if it is related to the actual instructions issued, or the address simulation/conversion done by the OS. I have also greatly optimized the amount of memory required by the program. On windows, a delta for an 8GB file can be now be created with a total of 125 mb required memory. The base app takes 65mb, so the used memory is around 60mb, and the raw diff file is approximately 44mb. I compared it a bit to the rdiff program on linux. For a 150mb file, rdiff takes about 1 second to generate a diff, and the same for a delta. SharpRSync runs the same in about 7 seconds, although some of that is the mono startup and library loading. For a 8gb file rdiff can generate a diff in about 500 seconds, where SharpRSync takes about 590 seconds. When generating a delta, rdiff uses 530 seconds, and SharpRSync uses 770 seconds. The last measurement is inaccurate as the memory requirement under mono is greater, and the test machine had low memory, so there was a lot of swapping going on. An interesting side effect is that the rdiff generated delta file is about 380kb, where the SharpRSync delta is 15 bytes. This is because rdiff does not do the sequence matching optimization mentioned on the librsync page (last paragraph): http://rsync.samba.org/tech_report/node4.html Further optimization should probably focus on getting the MD4 algorithm to run faster. git-svn-id: https://duplicati.googlecode.com/svn/trunk@480 59da171f-624f-0410-aa54-27559c288bec
85 lines
3.6 KiB
C#
85 lines
3.6 KiB
C#
//------------------------------------------------------------------------------
|
|
// <auto-generated>
|
|
// This code was generated by a tool.
|
|
// Runtime Version:2.0.50727.4952
|
|
//
|
|
// Changes to this file may cause incorrect behavior and will be lost if
|
|
// the code is regenerated.
|
|
// </auto-generated>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace Duplicati.Library.SharpRSync.Strings {
|
|
using System;
|
|
|
|
|
|
/// <summary>
|
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
|
/// </summary>
|
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
|
// class via a tool like ResGen or Visual Studio.
|
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
|
// with the /str option, or rebuild your VS project.
|
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
|
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
|
internal class Program {
|
|
|
|
private static global::System.Resources.ResourceManager resourceMan;
|
|
|
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
|
|
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
|
internal Program() {
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the cached ResourceManager instance used by this class.
|
|
/// </summary>
|
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
|
get {
|
|
if (object.ReferenceEquals(resourceMan, null)) {
|
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Duplicati.Library.SharpRSync.Strings.Program", typeof(Program).Assembly);
|
|
resourceMan = temp;
|
|
}
|
|
return resourceMan;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Overrides the current thread's CurrentUICulture property for all
|
|
/// resource lookups using this strongly typed resource class.
|
|
/// </summary>
|
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
|
internal static global::System.Globalization.CultureInfo Culture {
|
|
get {
|
|
return resourceCulture;
|
|
}
|
|
set {
|
|
resourceCulture = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Looks up a localized string similar to An error occurred: {0}.
|
|
/// </summary>
|
|
internal static string ErrorOccurred {
|
|
get {
|
|
return ResourceManager.GetString("ErrorOccurred", resourceCulture);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Looks up a localized string similar to Usage:
|
|
/// {0} signature <input-file> <signature-file>
|
|
/// {0} delta <signature-file> <input-file> <delta-file>
|
|
/// {0} patch <base-file> <delta-file> <output-file>.
|
|
/// </summary>
|
|
internal static string UsageMessage {
|
|
get {
|
|
return ResourceManager.GetString("UsageMessage", resourceCulture);
|
|
}
|
|
}
|
|
}
|
|
}
|