Comparer.default свойство

Dynamic objects

C# supports several types of dynamic objects.

ExpandoObject

dynamic a1 = new ExpandoObject();
a1.Field1 = "A";
a1.Field2 = 5;
a1.Field4 = 4;
dynamic a2 = new ExpandoObject();
a2.Field1 = "B";
a2.Field3 = false;
a2.Field4 = "C";
var comparer = new Comparer();
dynamic a1 = new ExpandoObject();
a1.Field1 = "A";
a1.Field2 = 5;
dynamic a2 = new ExpandoObject();
a2.Field1 = "B";
a2.Field3 = false;
var comparer = new Comparer();

Behavior if member not exists could be changed by providing custom ComparisonSettings (see Comparison Settings below).

dynamic a1 = new ExpandoObject();
a1.Field1 = "A";
a1.Field2 = ;
dynamic a2 = new ExpandoObject();
a2.Field1 = "B";
a2.Field3 = false;
a2.Field4 = "S";
var comparer = new Comparer(new ComparisonSettings { UseDefaultIfMemberNotExist = true });

DynamicObject

Let’s assume that we have such implementation of the DynamicObject class. It is necessary to have a correct implementation of the method GetDynamicMemberNames, otherwise Objects Comparer wouldn’t work in a right way.

private class DynamicDictionary : DynamicObject
{
    public int IntProperty { get; set; }

    private readonly Dictionary<string, object> _dictionary = new Dictionary<string, object>();

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        var name = binder.Name;

        return _dictionary.TryGetValue(name, out result);
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        _dictionary = value;

        return true;
    }

    public override IEnumerable<string> GetDynamicMemberNames()
    {
        return _dictionary.Keys;
    }
}
dynamic a1 = new DynamicDictionary();
a1.Field1 = "A";
a1.Field3 = true;
dynamic a2 = new DynamicDictionary();
a2.Field1 = "B";
a2.Field2 = 8;
a2.Field3 = 1;
var comparer = new Comparer();

Compiler generated objects

dynamic a1 = new
{
    Field1 = "A",
    Field2 = 5,
    Field3 = true
};
dynamic a2 = new
{
    Field1 = "B",
    Field2 = 8
};
var comparer = new Comparer();

IEnumerable<Difference> differences;
var isEqual = comparer.Compare((object)a1, (object)a2, out differences);

This example requires some additional explanations. Types of the objects a1 and a2 were generated by compiler and are considered as the same type if and only if objects a1 and a2 have same set of members (same name and same type). If casting to (object) is skipped in case of different set of members RuntimeBinderException will be thrown.

Обзор программы Image Comparer

Image Comparer представляет совершенно новую технологию того, как пользователи могут находить дубликаты фото. В отличие от большинства программ поиска дубликатов, которые выполняют поиск дубликатов по имени файла, его размеру и не способны находить похожие файлы, Image Comparer может находить похожие файлы с любой степенью схожести, которая может быть задана пользователем. Более того, программа Image Comparer способна
анализировать и распознавать изображения по содержанию,
независимо от имени файла, формата, размера изображения, битовой глубины и расположения объекта. Программа распознает даже повернутые или перевернутые фото или фотографии с разными условиями съемки. Инновационный алгоритм сравнения фотографий, основанный на содержании, обеспечивает феноменальную точность.

Overriding Comparison Rules

To override comparison rule we need to create custom value comparer or provide function how to compare objects and how to convert these objects to string(optional) and filter function(optional).
Value Comparer should be inherited from AbstractValueComparer or should implement IValueComparer.

public class MyValueComparer: AbstractValueComparer<string>
{
    public override bool Compare(string obj1, string obj2, ComparisonSettings settings)
    {
        return obj1 == obj2; //Implement comparison logic here
    }
}

Override comparison rule for objects of particular type.

//Use MyComparer to compare all members of type string 
comparer.AddComparerOverride<string>(new MyValueComparer());
comparer.AddComparerOverride(typeof(string), new MyValueComparer());
//Use MyComparer to compare all members of type string except members which name starts with "Xyz"
comparer.AddComparerOverride(typeof(string), new MyValueComparer(), member => !member.Name.StartsWith("Xyz"));
comparer.AddComparerOverride<string>(new MyValueComparer(), member => !member.Name.StartsWith("Xyz"));

Override comparison rule for particular member (Field or Property).

//Use MyValueComparer to compare StringProperty of ClassA
comparer.AddComparerOverride(() => new ClassA().StringProperty, new MyValueComparer());
comparer.AddComparerOverride(
    typeof(ClassA).GetTypeInfo().GetMember("StringProperty").First(),
    new MyValueComparer());
//Compare StringProperty of ClassA by length. If length equal consider that values are equal
comparer.AddComparerOverride(
    () => new ClassA().StringProperty,
    (s1, s2, parentSettings) => s1?.Length == s2?.Length,
    s => s.ToString());
comparer.AddComparerOverride(
    () => new ClassA().StringProperty,
    (s1, s2, parentSettings) => s1?.Length == s2?.Length);

Override comparison rule for particular member(s) (Field or Property) by name.

//Use MyValueComparer to compare all members with name equal to "StringProperty"
comparer.AddComparerOverride("StringProperty", new MyValueComparer());

Override comparison rule by member filter.

comparer.AddComparerOverride(new MyValueComparer(), m => m.Name == "StringProperty");

Overrides by type have highest priority, then overrides by member/member filter and overrides by member name have lowest priority.
If more than one value comparers of the same type (by type/by name/by member name) could be applied to the same member, exception AmbiguousComparerOverrideResolutionException will be thrown during comparison.

Example:

var a1 = new ClassA();
var a2 = new ClassA();
comparer.AddComparerOverride<string>(valueComparer1, member => member.Name.StartsWith("String"));
comparer.AddComparerOverride<string>(valueComparer2, member => member.Name.EndsWith("Property"));

var result = comparer.Compare(a1, a2);//Exception here

Что умеет программа:

  • Поиск фото дубликатов и похожих изображений по фактическому содержанию изображений
  • Сканирование на предмет дубликатов внутри одной папки или сравнение между двумя папками
  • Определение фото дубликатов в различных форматах: RAW, JPEG, J2K, BMP, GIF, PNG, TIFF, TGA
  • Выбор индивидуального порога схожести для фильтрации похожих соответствий
  • Предварительный просмотр фотографий во встроенной системе просмотра изображений
  • Классификация и сортировка файлов изображений по различным критериям: название, дата, размер, ширина, высота
  • Удаление, копирование, перемещение файлов одним кликом
  • Автоматическая отметка изображений с высоким или низким качеством для последующих операций над ними
  • Программа имеет русскоязычный интерфейс (среди десятков других доступных языков)

Находите дубликаты фотографий или похожие изображения с легкостью

Image Comparer позволяет находить дубликаты фотографий в компьютерной коллекции и без труда удалять лишние фотографии. Чтобы начать поиск, просто запустите Мастер сравнения, уточните, необходим ли поиск внутри одной папки, или сравнение двух папок, и выберите целевой каталог для сканирования. Можно также задать собственный уровень схожести изображений, который определяет, с какой точность Image Comparer будет искать сходства в файлах. По умолчанию, этот параметр устанавливается на уровне 95%. Наконец, нужно выбрать папку сохранения результатов и кликнуть на кнопке «Старт», чтобы запустить поиск.

Introduction

It is quite common situation when complex objects should be compared. Sometimes objects can contain nested elements, or some members should be excluded from comparison (auto generated identifiers, create/update date etc.), or some members can have custom comparison rules (same data in different formats, like phone numbers). This small framework was developed to solve such kind of problems.

Briefly, Objects Comparer is an object-to-object comparer, which allows to compare objects recursively member by member and define custom comparison rules for certain properties, fields or types.

Objects comparer can be considered as ready to use framework or as a starting point for similar solutions.

Ищем похожие изображения с Similar Images Finder

Приложение Similar Images Finder встречает нас недобрым сообщением на английском о том, что за него нужно заплатить $34. Тем не менее на протяжении 30 дней программа готова поработать бесплатно. Следом появляется окно, предлагающее выбрать каталоги для поиска дубликатов:

Из него же мы узнаём, что Similar Images Finder поддерживает 29 форматов изображений, причём пользователь может выбирать конкретные форматы для поиска или исключать лишние. В списке, помимо прочего, можно наблюдать ico и wbmp.

При нажатии Next вы запустите поиск дубликатов, а когда он будет закончен, нажмите Next ещё раз, чтоб увидеть дополнительные настройки. Регулируя их, вы сможете более тщательно настроить то, что отобразится в списке результатов. Наконец, нажав Next в третий раз, вы увидите уже и сам результат:

Перейти к следующей найденной картинке можно нажатием миниатюрной стрелочки в верхнем правом углу. Весь список найденных дубликатов открывается кликом по большой кнопке вверху с адресами текущих файлов.

В свою очередь, нажатие кнопки Next внизу приведёт к завершающему этапу работы. Там программа выведет список того, что, по её мнению, точно является дубликатами и предложит их удалить. На скриншоте выше Similar Images Finder справилась с изображением, куда был добавлен водяной знак, а также изменён контраст гистограммы.

Различая между картинками программа посчитала на уровне 5,5%. При этом в другом примере, где на вторую картинку нами был добавлен сильный эффект размытия, отличия, по версии приложения, почему-то составили всего 1,2%:

Увы, программа, находя реальные дубликаты, по умолчанию показывает и многие совсем непохожие друг на друга изображения, как будто в них есть что-то общее:

Factory

Factory provides a way to encapsulate comparers creation and configuration. Factory should implement IComparersFactory or should be inherited from ComparersFactory.

public class MyComparersFactory: ComparersFactory
{
    public override IComparer<T> GetObjectsComparer<T>(ComparisonSettings settings = null, IBaseComparer parentComparer = null)
    {
        if (typeof(T) == typeof(ClassA))
        {
            var comparer = new Comparer<ClassA>(settings, parentComparer, this);
            comparer.AddComparerOverride<Guid>(new MyCustomGuidComparer());

            return (IComparer<T>)comparer;
        }

        return base.GetObjectsComparer<T>(settings, parentComparer);
    }
}

Methods

When overridden in a derived class, performs a comparison of two objects of the same type and returns a value indicating whether one object is less than, equal to, or greater than the other.

Creates a comparer by using the specified comparison.

Determines whether the specified object is equal to the current object.

(Inherited from Object)

Serves as the default hash function.

(Inherited from Object)

Gets the Type of the current instance.

(Inherited from Object)

Creates a shallow copy of the current Object.

(Inherited from Object)

Returns a string that represents the current object.

(Inherited from Object)

IMDrops Image Tools 3.0.1 [2011, Графический редактор]

Год выпуска: 2011Жанр: Графический редакторРазработчик: Union D.Сайт разработчика: http://imdrops.ru/Язык интерфейса: Русский + АнглийскийТип сборки: StandardРазрядность: 32/64-bitОперационная система: Windows XP, Vista, 7 Описание: IMDrops Image Tools — маленькая, простая, но мощная программа — инструмент для пакетной обработки изображений: изменение размеров изображения, изменения размеров файлов, конвертирование, поворот, оптимизация качества, нанесение водяных знаков и больше. Еще несколько интересных возможностей: снимайте скриншоты с любых областей экрана, с окон, flash проигрыва …

VSO Image Resizer3 3.0.0.140 [2009, Графический редактор]

Год выпуска: 2009Жанр: Графический редакторРазработчик: Vso-SoftwareСайт разработчика: www.vso-software.frЯзык интерфейса: РусскийПлатформа: Windows 2000,XP,2003,Vista,7Описание: Основное предназначение программы состоит в увеличении и уменьшении размера изображений. Однако, кроме этой функции здесь присутствует возможность изменения уровня сжатия графического файла, конвертирования в другой формат, установки водяного знака и пакетного переименования имен файлов по установленной маске. Уникальность этой программы состоит в том, что все вышеописанные действия можно сделать за один раз. …

Программы / Программы для работы с Мультимедиа / Графические редакторы, 3D моделирование
Подробнее  

Image Converter Plus 8.0.5.91007 [2010, Конвертор]

Год выпуска: 2010Жанр: КонверторРазработчик: FCoder Group, IncСайт разработчика: http://www.imageconverterplus.com/Язык интерфейса: АнглийскийПлатформа: Windows XP, Vista, 7Таблетка: присутствует Описание: ImageConverter Plus — это пакет инструментальных средств для просмотра, преобразования и печати графических файлов, включающий в себя четыре модуля: графический редактор, модуль для улучшения качества печати, блок пакетной обработки файлов и модуль расширения. ImageConverter Plus — мощный профессиональный набор инструментов для просмотра, преобразования и печати графических файлов, в …

Комментарии

Используйте класс, производный от этого класса, чтобы предоставить пользовательскую реализацию IComparer<T> интерфейса для использования с классами коллекций, такими как SortedList<TKey,TValue> SortedDictionary<TKey,TValue> универсальные классы и.

Разница между наследованием от Comparer<T> класса и реализацией System.IComparable интерфейса выглядит следующим образом:

  • Чтобы указать, как два объекта должны сравниваться по умолчанию, реализуйте System.IComparable интерфейс в своем классе. Это гарантирует, что в операциях сортировки будет использоваться указанный по умолчанию код сравнения.

  • Чтобы определить компаратор для использования вместо компаратора по умолчанию, следует использовать класс, производный от Comparer<T> класса. Затем это средство сравнения можно использовать в операциях сортировки, принимающих компаратор в качестве параметра.

объект, возвращаемый Default свойством, использует System.IComparable<T> универсальный интерфейс ( в C#, в Visual Basic) для сравнения двух объектов. Если тип не реализует System.IComparable<T> универсальный интерфейс, Default свойство возвращает объект Comparer<T> , который использует System.IComparable интерфейс.

Универсальный поиск дубликатов с Duplicate Remover Free

Duplicate Remover Free – единственная в нашем обзоре программа, которая сосредоточена всё же не конкретно на дубликатах фотографий, а на поиске дубликатов в целом.

Как показывает практика, такие универсальные решения не очень хорошо проявляют себя в задачах, связанных с какой-то более узкой областью.

Однако одной такой программе мы сегодня даём шанс. Как подсказывает слово Free – распространяется она бесплатно. Вторым достоинством приложения является русский язык, а третьим – относительная современность на фоне других программ в этой подборке, многие из которых, к огромному сожалению, не обновлялись уже долгие годы.

Вам следует кликнуть по кнопке «добавить директорию» и выбрать нужные папки. По умолчанию программа в заданном каталоге не нашла для нас вообще ничего, однако, когда вверху вместо «точные дубликаты» мы выбрали пункт «похожие изображения», тут же были найдены четыре группы дубликатов, одна из которых состояла сразу из трёх файлов:

Дополнительных возможностей у приложения совсем немного. В частности, вы можете исключать из поиска файлы до и после определённого размера.

Advanced SystemCare Ultimate 9.1.0.711 [2016, Диагностика]

Год выпуска: 2016Жанр: ДиагностикаРазработчик: ІОbіtСайт разработчика: httрs://hrеf.lі/?httр://ru.іоbіt.соm/аdvаnсеd-sуstеmсаrе-аntіvіrus/Язык интерфейса: РусскийТип сборки: StаndаrdРазрядность: 32/64-bіtОперационная система: Wіndоws ХР, Vіstа, 7, 8, 8.1, 10Описание: Аdvаnсеd SуstеmСаrе Ultіmаtе — комплексная забота о состоянии вашего компьютера. Антивирус с движком Bіtdеfеndеr, защита от вредоносных сайтов и загрузок, монитор ресурсов и различные инструменты для оптимизации и настройки системы Wіndоws Основные возможности Безопасность • Антивирусная защита Удаляет глубокие заражения …

Программа для поиска дубликатов Awesome Duplicate Photo Finder

Если вы ищете именно предельно простую программу для качественного поиска дублирующихся фото и изображений, в которой было бы элементарно легко разобраться, то обратите внимание на Awesome Duplicate Photo Finder. Интерфейс здесь на английском, но он настолько прост, что разберётся в нём каждый

С помощью кнопки «+» укажите нужный для поиска каталог или несколько каталогов, после чего нажмите Start Search и по ним начнётся поиск. Опция Scan Subdirectories по умолчанию включена и отвечает за поиск в подпапках. Со своими задачами программа справляется, находя как весьма похожие:

Так и чуть более отличающиеся между собой картинки:

В настройках программы вы можете задать соответствие в 100%, если вам нужны исключительно абсолютно одинаковые фотографии.

Самих настроек, как видите, немного. Пожалуй, самое печальное, что работает программа всего с пятью основными форматами: BMP, JPG, PNG, GIF и TIFF. Причём последний по умолчанию не учитывается.

Также есть опции для обеспечения удаления дубликатов напрямую в корзину и отключения всплывающего подтверждения. Ещё программа умеет обновляться автоматически.

Игнорирование в процессе сравнения

Часто
возникает ситуация, когда вам необходимо игнорировать
определенные слова в сравниваемом документе.

  • Например, если в двух
    документах встречается указание даты и времени, которое не имеет
    значение при сравнении документов, то можно легко настроить Compare Suite на игнорирование
    этих строк.

  • Также, есть возможность
    игнорировать определенные ключевые слова, например можно игнорировать
    слово «стол», тогда Compare Suite
    будет также игнорировать слово «столы» и программа не покажет, что
    документы имеют отличия в этих словах.

Вот другой хороший пример как эта
функция может помочь:

Представьте, что есть строка,
которая содержит какой-либо случайный идентификатор, например
внутренний номер документа, который не имеет значения, и даже наоборот
мешает, при сравнении документов. Вы можете использовать синтаксис вида
: {DOC_ID 1}, таким образом Вы скажете Compare Suite игнорировать
первую строку следующую за маркером «DOC_ID».

Инфо-панель and строка статуса

Информационная
панель и строка
статуса в Compare Suite хороший способ сэкономить время.
Убедитесь, что вы знаете какую информацию можно почерпнуть оттуда.

Изначально вы можете получить всю
необходимую статистику об изменениях, которые были найдены в
сравниваемых документах, т.е. количество измененных, новых или
удаленных строк.

Информация на Инфо-панели будет меняться в зависимости
от выбранного метода сравнения.

Сравнение
«по ключевым словам» и Инфо-панель

Например, если вы будете использовать метод
сравнение «По ключевым словам»   программа покажет
информацию, которая может быть использована для статистического анализа
текста. Compare Suite покажет:

  • Число уникальных ключевых слова в каждом документе
  • Число одинаковых ключевых слов

Более того, используя методы сравнения «по ключевым
словам», Вы сможете просмотреть эти уникальные ключевые слова и узнать
о чём идет речь в документах.

В итоге, информация из статус-строки поможет вам понять цветовую
схему использованную в Compare Suite для того, чтобы
подсветить новые, измененные или стёртые слова. 

Методы

При переопределении в производном классе выполняет сравнение двух объектов одного типа и возвращает значение, показывающее, что один объект меньше или больше другого объекта или равен ему.

Создает компаратор с использованием указанного сравнения.

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

How does it work?

Audio Comparer begins by listening to your entire music collection; every format; and remembers it all. You can choose to have AC view your files as one big audio collection, or you can divide your music content into smaller groups. Compared to the time you’d spend doing the same thing manually, you’ll be blown away by how fast the Audio Comparer is. In fact, it takes only a second or two to «listen» to an entire MP3! Equally as quick is the audio comparison process; you’ll begin to see results within seconds. The results will be displayed in a tree layout with branches connecting files based on the degree of similarty within each parent branch.

Solution

public class Person{    public Guid PersonId { get; set; }public string FirstName { get; set; }public string LastName { get; set; }public string MiddleName { get; set; }public string PhoneNumber { get; set; }public override string ToString()    {        return $"{FirstName} {MiddleName} {LastName} ({PhoneNumber})";    }}

Phone number can have different formats. Let’s compare only digits.

public class PhoneNumberComparer: AbstractValueComparer<string>{    public override bool Compare(string obj1, string obj2, ComparisonSettings settings)    {        return ExtractDigits(obj1) == ExtractDigits(obj2);    }private string ExtractDigits(string str)    {        return string.Join(            string.Empty,             (str ?? string.Empty)                .ToCharArray()                .Where(char.IsDigit));    }}

Factory allows not to configure comparer every time we need to create it.

public class MyComparersFactory: ComparersFactory{    public override IComparer<T> GetObjectsComparer<T>(ComparisonSettings settings = null, IBaseComparer parentComparer = null)    {        if (typeof(T) == typeof(Person))        {            var comparer = new Comparer<Person>(settings, parentComparer, this);//Do not compare PersonId            comparer.AddComparerOverride<Guid>(DoNotCompareValueComparer.Instance);//Sometimes MiddleName can be skipped. Compare only if property has value.            comparer.AddComparerOverride(                () => new Person().MiddleName,                (s1, s2, parentSettings) => string.IsNullOrWhiteSpace(s1) || string.IsNullOrWhiteSpace(s2) || s1 == s2);            comparer.AddComparerOverride(                () => new Person().PhoneNumber,                new PhoneNumberComparer());return (IComparer<T>)comparer;        }return base.GetObjectsComparer<T>(settings, parentComparer);    }}

Configuring comparer.

_factory = new MyComparersFactory();_comparer = _factory.GetObjectsComparer<Person>();var person1 = new Person{    PersonId = Guid.NewGuid(),    FirstName = "John",    LastName = "Doe",    MiddleName = "F",    PhoneNumber = "111-555-8888"};var person2 = new Person{    PersonId = Guid.NewGuid(),    FirstName = "John",    LastName = "Doe",    PhoneNumber = "(111) 555 8888"};IEnumerable<Difference> differences;var isEqual = _comparer.Compare(person1, person2, out differences);
var person1 = new Person{    PersonId = Guid.NewGuid(),    FirstName = "Jack",    LastName = "Doe",    MiddleName = "F",    PhoneNumber = "111-555-8888"};var person2 = new Person{    PersonId = Guid.NewGuid(),    FirstName = "John",    LastName = "Doe",    MiddleName = "L",    PhoneNumber = "222-555-9999"};IEnumerable<Difference> differences;var isEqual = _comparer.Compare(person1, person2, out differences);

Нахождение одинаковых фотографий в три клика с VisiPics

Следующая программа – VisiPics. В отличие от рассмотренной выше Image Comparer, VisiPics является бесплатным приложением, также специализирующемся на дубликатах фото. Увы, локализации на русский здесь нет, но расстраиваться по этому поводу точно не стоит: всё очень просто и предельно понятно.

С помощью боковой панельки навигации (мы обвели её в рамку) выберите нужный каталог. Далее нажмите стрелочку со значком «+», чтобы добавить эту папку в список, по которому будет вестись поиск. При желании таким же образом вы можете выбрать ещё несколько папок. Наконец, третьим шагом нажмите кнопку Play, чтобы запустить процесс нахождения дубликатов.

Справа от неё располагается специальный ползунок, где вы можете настраивать уровень «внимательности» программы. В случае установленного по умолчанию базового уровня VisiPics обнаружила для нас лишь две группы дубликатов, одна из которых состояла из трёх изображений, а другая из двух:

Это те изображения, которые программа считает практически идентичными дубликатами. Однако если вы понизите ползунок до уровня Loose, то находиться будут и просто похожие друг на друга изображения. В нашем случае при установке Loose вместо Basic приложение нашло ещё четыре (в итоговом тесте ниже – 5) группы дубликатов, а одну из двух уже найденных дополнило ещё одной картинкой:

Дополнительных опций у программы относительно немного. Здесь можно настроить поиск в подпапках (по умолчанию он включён), отображение скрытых папок, учёт фотографий, повёрнутых на 90 градусов. На вкладке loader можно попросить VisiPics игнорировать мелкие файлы или, наоборот, картинки в слишком большом разрешении

Последнее важно для скорости

Image-Line — FL Studio 12.1.3 (Producer Edition) (RUS/ENG) [2015, Виртуальная студия]

Год выпуска: 2015Жанр: Виртуальная студияРазработчик: Image-LineСайт разработчика: Image-LineЯзык интерфейса: Русский + АнглийскийТип сборки: StandardРазрядность: 32/64-bitОперационная система: (Windows XP, Vista, 7, 8, SP-3)Системные требования: — Процессор 2 Ггц AMD/Intel Pentium 3/4 (SSE1) — 1 Гб Оперативной памяти (желательно 2 Гб) — 1 Гб Свободного места на диске (желательно 2 Гб) — Поддержка драйверов DirectSound и ASIO/ASIO2 Описание: FL Studio 12 — это обширная мастерская, предназначенная специально для создания, редактирования и записи музыкальных композиций и ремиксов с помо …

Заключение

  1. dbForge Schema Compare for SQL Server компании Devart
  2. dbForge Data Compare for SQL Server компании Devart
  3. ApexSQL Diff компании Quest Software
  4. ApexSQL Data Diff компании Quest Software
  5. SQL Compare компании RedGate
  6. SQL Data Compare компании RedGate

После дискуссий

  1. для сравнения схем и данных баз данных разных СУБД
  2. для перехода с MS SQL Server на PostgreSQL:
    • severalnines.com/blog/migrating-mssql-postgresql-what-you-should-know
    • dbconvert.com/mssql/postgresql
  3. для сравнения схем и данных баз данных СУБД MS SQL Server
  4. для перехода с одной СУБД в другую СУБД и для сравнения схем и данных баз данных разных СУБД. Также весьма хорош инструмент symmetricds
  5. для переноса БД Jira из СУБД MS SQL Server в СУБД PostgreSQL
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector