Как проверить, указывают ли 2 объекта DirectoryInfo на тот же каталог?

Многоядерное программирование может на самом деле потребовать больше чем одной парадигмы. Некоторые текущие соперники:

  1. MapReduce. Это работает хорошо, где проблема может быть легко разложена на параллельные блоки.
  2. Вложенный Параллелизм Данных . Это подобно MapReduce, но на самом деле поддерживает рекурсивное разложение проблемы, даже когда рекурсивные блоки имеют неправильный размер. Ищите АРИФМЕТИЧЕСКИЙ ПРОЦЕССОР, чтобы быть большой победой на чисто функциональных языках, работающих на но ограниченных аппаратных средствах с массовым параллелизмом (как GPU).
  3. программное обеспечение Транзакционная Память . При необходимости в традиционных потоках STM делает их терпимыми. Вы платите 50%-ю производительность, пораженную в критических разделах, но можно масштабировать сложные схемы блокировки к 100 с процессоров без боли. Это не будет, однако, работать на распределенные системы.
  4. Параллель возражают потокам с обменом сообщениями . Эта действительно умная модель используется Erlang. Каждый "объект" становится легким потоком, и объекты связываются асинхронными сообщениями и сопоставлением с образцом. Это - в основном истинное параллельное OO. Это успешно выполнилось приятно в нескольких реальных приложениях, и это работает отлично для ненадежных распределенных систем.

Некоторые из этих парадигм дают Вам максимальную производительность, но только работают, если проблема разлагается чисто. Другие жертвуют некоторой производительностью, но позволяют более широкое множество алгоритмов. Я подозреваю, что некоторая комбинация вышеупомянутого в конечном счете станет стандартным инструментарием.

11
задан tranmq 25 November 2009 в 01:00
поделиться

3 ответа

В Linux вы можете сравнить номера INode двух файлов, если они идентичны. Но под Windows такой концепции нет, по крайней мере, я не знаю. Вам нужно будет использовать p / invoke для разрешения ссылок, если таковые имеются.

Сравнение строк - лучшее, что вы можете сделать. Обратите внимание, что использование String.Compare (str1, str2, StringComparison.InvariantCultureIgnoreCase) немного быстрее, чем вы подходите.

6
ответ дан 3 December 2019 в 08:30
поделиться

Сравнение без учета регистра - лучшее, что вы можете получить. Извлеките его во вспомогательный класс на случай, если человечество найдет лучший метод.

public static class DirectoryInfoExtensions
{
    public static bool IsEqualTo(this DirectoryInfo left, DirectoryInfo right)
    {
        return left.FullName.ToUpperInvariant() == right.FullName.ToUpperInvariant();
    }
}

и используйте:

if (di1.IsEqualTo(di2))
{
    // Code here
}
0
ответ дан 3 December 2019 в 08:30
поделиться

Вместо этого вы можете использовать объекты Uri. Однако ваши объекты Uri должны указывать на «файл» внутри этих каталогов. Этот файл на самом деле не обязательно должен существовать.

    private void CompareStrings()
    {
        string path1 = @"c:\test\rootpath";
        string path2 = @"C:\TEST\..\TEST\ROOTPATH";
        string path3 = @"C:\TeSt\RoOtPaTh\";

        string file1 = Path.Combine(path1, "log.txt");
        string file2 = Path.Combine(path2, "log.txt");
        string file3 = Path.Combine(path3, "log.txt");

        Uri u1 = new Uri(file1);
        Uri u2 = new Uri(file2);
        Uri u3 = new Uri(file3);

        Trace.WriteLine(string.Format("u1 == u2 ? {0}", u1 == u2));
        Trace.WriteLine(string.Format("u2 == u3 ? {0}", u2 == u3));

    }

Будет напечатано:

u1 == u2 ? True
u2 == u3 ? True
6
ответ дан 3 December 2019 в 08:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: