2014-07-09 5 views
0

기존 웹 앱에서 PetaPoco를 사용하는 것을 고려합니다. 내가 웹 응용 프로그램에서 Database 개체의 권장 수명은 얼마입니까?

  • 요청이 빠르다 풀에서 별도의 스레드에서

    • 처리 요청을 의미 기존 말하는 : 없음 롱 폴링, 스트리밍 등
    • 하지만 반드시 ASP.NET, 그것은 예를 들어있을 수 있습니다 낸시

    Database 개체와 기본 DbConnection의 수명은 얼마입니까? 만들고 즉시 폐기 작업이 완료 될 때 : 작업 스타일의 단위는

  • 이 당 요청

    • (I 인해 this answer에, 아니 추측)
    • 당 스레드 정적 세계적으로 정적, [ThreadStatic]

    특히 PetaPoco로 프로덕션 응용 프로그램을 실행 한 사람들의 답변에 감사드립니다.

  • +1

    도 좋은 작품 스레드 민첩성 때문에 ASP.NET에서. –

    답변

    2

    전 세계적으로 정적

    • 을 갈 수있는 방법입니다. 동일한 레코드 세트 및 다른 레코드에 액세스하는 데 문제가 발생합니다. 확실히 아니오.
    • 스레드 당 정적입니다. 작업 스타일의 큰
    • 장치를 작동 : 당신이 [ThreadStatic] Asp.net에
    • 이 당 요청하지 않도록해야합니다 그것은 당신이 * 확실히 *`ThreadStatic` 피해야한다 (나의 선호)
    +0

    표를 받아 들였다 : 간결하고 완전하다. 고맙습니다! – amartynov

    +0

    @Eduardo 요청 기반으로 연결 풀링의 효과를 제한합니까? – Matt

    +0

    @Matt 실제로 성능 저하없이 새로운 연결을 제공하기 위해 연결 풀링을 완전히 사용합니다 –

    1

    스레드 당 하나의 개체가 필요하지만 요청 처리는 하나의 스레드에서 시작하여 다른 스레드에서 완료 될 수 있기 때문에 개체를 스레드 자체와 연결하면 안됩니다.

    요청 당 하나의 개체를 사용하면 일반적으로 빠른 요청 처리에 적합합니다. 그러나 항상 간단한 것은 아닙니다. 객체를 폐기하지 않고 객체를 떠날 위험이 있다면 (예를 들어 예외가있는 경우) 한 객체를 올바르게 처리 할 수있는 제한된 작업에 사용하는 것이 좋습니다.

    +0

    +1 배치되지 않은 물체의 위험. "요청 처리는 한 스레드에서 시작하여 다른 스레드에서 완료 할 수 있습니다"에 대해 자세히 설명 할 수 있습니까? 이것이 언제 가능합니까? – amartynov

    +1

    @ amartynov :이를 스레드 전환 또는 스레드 민첩성이라고합니다 (추가 검색을 위해). 다음은 명확한 예를 제시 한 블로그 게시물입니다. http://blog.idm.fr/2010/03/aspnet-thread-agility-or-why-threadstatic-should-not-be-used.html – Guffa

    1

    데이터베이스는 값싼 개체이므로 필요에 따라 만들면됩니다. 나는 PetaPoco (또는 더 구체적으로 AsyncPoco)를 사용하여 바쁜 웹 응용 프로그램에서 I/O 바운드 작업 중에 스레드를 묶지 않을 것입니다. Others do prefer per-request 그래도 잘 작동해야합니다. 당신이 바로 같아요 요청에 따라

    +0

    감사합니다. 당신은 기존의 대답을 지적했습니다. 나는 더 잘 수색 했어야했다 : – amartynov