Выкроил время, потестил диффалки. Из списков на
wiki и
stackoverflow отобрались (по алфавиту):
Из жалости пропущены AnkhSvn diff, TFS-овский diffmerge.exe, Tortoise Merge и KDiff.
Наклёвывается весьма интересная вещь —
CodeCompare, если в следующей бете наконец починят глючащий детект регионов — добавлю в список.
Скриншоты (2 mb).
Исходники для проверки.
Рецепт: взять чуть-чуть кода (Program 1.cs)...
| Скрытый текст |
| using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Calc
{
class Program1
{
static void Main(string[] args)
{
int count = 10 * 1000;
byte[] buffer = new byte[count];
Random rnd = new Random();
rnd.NextBytes(buffer);
long total = 0;
foreach (byte b in buffer)
{
total += b;
}
Console.WriteLine("AVG: {0}", total * 1.0 / buffer.Length);
Console.ReadKey();
}
}
}
|
| |
... добавить чуть-чуть рефакторинга (Program 2.cs)...
| Скрытый текст |
| using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Calc
{
class Program2
{
const int Count = 10 * 1000;
private static byte[] GetBytes()
{
byte[] buffer = new byte[Count];
new Random().NextBytes(buffer);
return buffer;
}
static void Main(string[] args)
{
byte[] buffer = GetBytes();
Console.WriteLine("AVG: {0}", GetAverage(buffer));
Console.ReadKey();
}
private static double GetAverage(byte[] buffer)
{
long total = 0;
foreach (byte b in buffer)
{
total += b;
}
return total * 1.0 / buffer.Length;
}
}
}
|
| |
... и перетасовать (Program3.cs).
| Скрытый текст |
| using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Calc
{
class Program3
{
const int Count = 10 * 1000;
private static byte[] GetBytes()
{
byte[] buffer = new byte[Count];
new Random().NextBytes(buffer);
return buffer;
}
private static double GetAverage(byte[] buffer)
{
long total = 0;
foreach (byte b in buffer)
{
total += b;
}
return total * 1.0 / buffer.Length;
}
static void Main(string[] args)
{
byte[] buffer = GetBytes();
Console.WriteLine("AVG: {0}", GetAverage(buffer));
Console.ReadKey();
}
}
}
|
| |
Результаты —
на скриншотах.
Единственный (да и то условно) правильный дифф между Program1.cs и Program3.cs — старый добрый windiff. За ним толпятся Compare It!, Compare++, WinMerge, Beyond Compare и Araxis — у каждого свои глюки, так что явного победителя нет, порядок — по личным предпочтениям.
Из толпы слегка выбивается Compare It!, который а) иногда вспоминает про перемещённые строчки (а winmerge лучше бы про них и не вспоминал) и б) лучше остальных прожёвывает файлы c кучей изменений (доберусь до работы — скину примеры).
Чтоб сразу не переезжать в КСВ: что там ещё осталось из юзабельных diff/merge под win?
P.S. Off: когда уже [cut] и [s] добавят в редактор?