Linq: Каково различие между == и равняется в соединении?

Нет, это почти так эффективно, как Вы собираетесь добраться. Вы могли записать программу C, которая могла сделать задание немного быстрее (меньше времени запуска и аргументов обработки), но это будет, вероятно, склоняться к той же скорости как sed, как файлы становятся большими (и я предполагаю, что они являются большими, если требуется минута).

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

, Например, если это - файл, который обрабатывает некоторая другая программа B, одно решение не состояло бы в том, чтобы снять изоляцию с первой строки, но изменить программу B для обработки ее по-другому.

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

Вы могли повторно спроектировать программу B так, чтобы она не пыталась удалить первую строку, но поддерживает персистентное (вероятно, основанный на файле) смещение в файл A так, чтобы, в следующий раз она работала, она могла искать на то смещение, обработать строку там и обновить смещение.

Затем в спокойное время (полночь?), это могло сделать специальную обработку файла A, чтобы удалить все строки, в настоящее время обрабатываемые и задержать смещение к 0.

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

38
задан Michael Klement 14 July 2009 в 07:32
поделиться

2 ответа

Есть хорошее объяснение Мэтта Уоррена в The Moth :

«Причина, по которой в C # есть слово« равно »вместо оператора« == », заключалась в том, чтобы проясните, что предложение on требует, чтобы вы предоставили два отдельных выражения, которые сравниваются на равенство, а не одно выражение предиката. Шаблон from-join сопоставляется со стандартным оператором запроса Enumerable.Join (), который определяет два отдельных делегата, которые являются используется для вычисления значений, которые затем можно сравнивать. Они нужны ему в качестве отдельных делегатов, чтобы построить таблицу поиска с одним и исследовать таблицу поиска с помощью другого. Полный обработчик запросов, такой как SQL, может свободно проверять одно выражение предиката и выбрать, как он будет его обрабатывать. Тем не менее,для того, чтобы LINQ работал аналогично SQL, потребовалось бы, чтобы условие соединения всегда указывалось как дерево выражений, что является значительными накладными расходами для случая простого объекта в памяти ».

Однако это касается join . I Я не уверен, что равно следует использовать в вашем примере кода (он вообще компилируется?).

42
ответ дан 27 November 2019 в 03:43
поделиться

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

17
ответ дан 27 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

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