Что преимущества LINQ к SQL?

У меня возникла проблема в том, что я хотел завершить многопроцессорный подпроцесс, если потребовалось больше времени, чем заданная длина таймаута. Я хотел установить тайм-аут в Popen(), но это не сработало. Затем я понял, что Popen().wait() равен call(), и поэтому у меня возникла идея установить тайм-аут в рамках метода .wait(timeout=xxx), который, наконец, работал. Таким образом, я решил это так:

import os
import sys
import signal
import subprocess
from multiprocessing import Pool

cores_for_parallelization = 4
timeout_time = 15  # seconds

def main():
    jobs = [...YOUR_JOB_LIST...]
    with Pool(cores_for_parallelization) as p:
        p.map(run_parallel_jobs, jobs)

def run_parallel_jobs(args):
    # Define the arguments including the paths
    initial_terminal_command = 'C:\\Python34\\python.exe'  # Python executable
    function_to_start = 'C:\\temp\\xyz.py'  # The multithreading script
    final_list = [initial_terminal_command, function_to_start]
    final_list.extend(args)

    # Start the subprocess and determine the process PID
    subp = subprocess.Popen(final_list)  # starts the process
    pid = subp.pid

    # Wait until the return code returns from the function by considering the timeout. 
    # If not, terminate the process.
    try:
        returncode = subp.wait(timeout=timeout_time)  # should be zero if accomplished
    except subprocess.TimeoutExpired:
        # Distinguish between Linux and Windows and terminate the process if 
        # the timeout has been expired
        if sys.platform == 'linux2':
            os.kill(pid, signal.SIGTERM)
        elif sys.platform == 'win32':
            subp.terminate()

if __name__ == '__main__':
    main()
20
задан alchemical 27 February 2009 в 07:30
поделиться

4 ответа

Преимущества предложения L2S:

  • Никакие волшебные строки, как Вы не имеют в SQL-запросах
  • проверка Компиляции Intellisense
  • , когда база данных изменяется
  • Более быстрая разработка
  • шаблон Единицы работы (контекст)
  • Автоматически сгенерированные объекты области, которые являются применимыми маленькими проектами
  • Ленивая загрузка.
  • Обучение записать linq запросы/лямбды является необходимостью, учатся для разработчиков.NET.

Относительно производительности:

  • , Скорее всего, производительность не будет проблемой в большинстве решений. Предварительно оптимизировать - антишаблон. Если Вы позже видите, что некоторые области применения состоят в том, чтобы замедлиться, можно проанализировать эти части и в некоторых случаях даже подкачать некоторые запросы linq с хранимыми процедурами или ADO.NET.
  • Во многих случаях ленивая функция загрузки может ускорить производительность или по крайней мере упростить код много.

Относительно отлаживания:

  • , По-моему, отлаживание Linq2Sql намного легче, чем обе хранимых процедуры и ADO.NET. Я рекомендую смотреть на Visualizer Отладки Linq2Sql, который позволяет Вам видеть запрос и даже инициировать выполнение для наблюдения результата при отладке.
  • можно также настроить контекст для записи всех запросов SQL консоли, больше информации здесь

Относительно другого слоя:

  • Linq2Sql может рассматриваться как другой слой, но это - чисто уровень доступа к данным. Хранимые процедуры являются также другим слоем кода, и я видел много случаев, где часть бизнес-логики была реализована в хранимые процедуры. Это намного хуже, по-моему, потому что Вы тогда разделяете бизнес-слой на два места, и разработчикам будет более трудно получить четкое представление о бизнес-домене.
41
ответ дан 29 November 2019 в 22:58
поделиться

Всего несколько быстрых мыслей.

LINQ в общем

  • Запрос наборы в оперативной памяти и хранилища данных из процесса с тем же синтаксисом и операторами
  • стиль описания А работает очень хорошо на запросы - легче и читать и записать в очень многих случаях
  • , Аккуратная интеграция языка позволяет новым поставщикам (и в и из процесса) быть записанными, и используйте в своих интересах тот же синтаксис выражения запроса

LINQ к SQL (или другая база данных LINQ)

  • запросы Записи, где Вам нужны они, а не, как сохранено procs делает разработку намного быстрее: существует гораздо меньше шагов, включенных только для получения данных, которые Вы хотите
  • Гораздо меньше строк (сохранил procs, названия параметра или просто SQL), включенный, где опечатки могут быть раздражающими; другая сторона этой монеты - то, что Вы получаете Intellisense для своего запроса
  • , Если Вы не собираетесь работать с "необработанными" данными из ADO.NET, Вы собираетесь иметь объектную модель где-нибудь так или иначе. Почему бы не позволять LINQ к SQL обработать его для Вас? Мне скорее нравится способность просто сделать запрос и возвратить объекты, готовые использовать.
  • я ожидал бы, что производительность будет прекрасна - и где это не, можно настроить его сами или отступить к прямому SQL. Используя ORM, конечно, не устраняет необходимость создания правильных индексов и т.д., и необходимо обычно проверять SQL, сгенерированный на нетривиальные запросы.

Это не панацея каким-либо образом, но я значительно предпочитаю, чтобы это или к делающий SQL-запросы непосредственно или к использующий сохранило procs.

14
ответ дан 29 November 2019 в 22:58
поделиться

Я должен сказать, что они - то, что Вы искали. Это занимает время, привыкая к нему, но как только Вы делаете Вы не можете думать о возвращении (по крайней мере, для меня). Относительно linq по сравнению с хранимыми процедурами у Вас может быть низкая производительность на также при создании его неправильно. Я переместил в linq к sql некоторые хранимые процедуры клиента, которые были ужасно кодированы, таким образом, время, отброшенное от 20secs (полностью недопустимый для веб-приложения) к < 1 секунда. И очень намного меньше кода тогда решение для хранимой процедуры.

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

1
ответ дан 29 November 2019 в 22:58
поделиться

Мы недавно переключились на LINQ2Entity по среде Платформы Объекта. Прежде, у нас был основной SQLadapters. Так как база данных, с которой мы работаем, является довольно маленькой, я не могу прокомментировать производительность LINQ.

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

0
ответ дан 29 November 2019 в 22:58
поделиться
Другие вопросы по тегам:

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