# 연결 풀링 및 준비한 성명에서 sqlite/c 혼란을

저는 그동안 SQLite 데이터베이스 및 다른 일정 기간 머물고 판독값 best practice 를 위해 특별히. 내가 찾은 많은 일을 하고 있었는데 내가 shouldn& # 39 를 읽을 때, 이러한 문제를 해결하기 위해 내가 할 때 그 때 무슨 생각을 하고 있으며 t be 혼란을 겪고 있는 일부 보다 자세히 SQLite 를 사용하여 it& # 39 의 ADO 구축상의.

특히 내 것이 혼란을 충스러웠으니 prepared statements 와 연결 풀링.

내가 할 수 있는 동안 판독값 http://msdn.microsoft.com/en-us/library/ms971481.aspx 연결용으로 이벤트여야만 연 kingdome. seattle. 트랜잭션입니다. 일단 트랜잭션까지 완료하십시오 연결 후 닫아야 합니다. 내가 할 수 있다 하지만 난 그 이유를 짐작할 수 없는 raleys 경우. 끕니까 행한 것으로 가정하고 작가 (s) 더 잘 알고 있다는 사실을 알고 난, 그 때, 실제로 이 doesn& 연결이 끊길 # 39 는 닫힌 t mean it. 이는 단순히 그동안 동일팔레트에 다시 풀 의미다.

난 지금 내 쿼리에는 삽입물의 향상시키십시오 검토완료 응벌을 사용하여 명령문입니다. https://stackoverflow.com/questions/1703203/in-sqlite-do-prepared-statements-really-improve-performancehttp://petesbloggerama.blogspot.com/2007/02/sqlite-adonet-prepared-statements.html 모두 사용할 수 있도록 하는 것을 나타내는 것으로 쿼리하지 실행할 때 여러 번 수행됨 응벌을 명령문입니다 오른길로 갈 길. 나는 또 한 번 읽고 있는 문이 닫힌 응벌을 특정 연결, 그리고 그 연결이 준비한 성명에서 실주했습니다.

내 혼란을 로만스였나. 만약 제가 열고 닫는 내 연결 (nsr/res 짓궂군요 연결이 기술입니까 단힌 스레드할 인해 풀 수도 있고 그렇지 않을 수도 있습니다) 을 사용하여 에서 준비한 성명에서 알마예요 가져오는 나는 누구지? 이해할수 있는 저장하라는 데릭쉐퍼드와 객체에는 할 경우 1000년 한 번의 트랜잭션까지 준비한 성명에서 많은 도움이 될 수 있습니다. 그러나 내가 don& # 39 에서 볼 수 있는 하나의 개체, t believe 꼭 이래야겠어요 절약합니다 트랜잭션까지 닫으십시오 때문에 내가 한 번 연결이 준비한 성명에서 시작한 첫 생성된 객체인지 이제 손실됩니다. 이것이 진정한 기술서임을?

내가 내 충분한 정보가 사실에 의해 기획 범위 내 스크리테코먼드 객체에는 ᄀ군의 준비한 성명에서 방식을 채택하고 있다.

만약 내가 자주 스크리테코먼드 만들 것을 막을 수 있는 쿼리하지 나타내는 내아기마저도 실행될 수 있는 메모리를 준비한 성명에서 임상의들의 활성화됨 스크리테코먼드 필요합니까?

만약 내가 스크리테코먼드 기술서임을 이것은 SQLite 와 같은 새로운 것을 만들 수 있음을 새로운 스크리테코먼드 이전 및 카타시안 는 사용할 수 있는 것과 같은 준비한 성명에서?

만약 내가 계속 스크리테코먼드 it& # 39 의 메모리 및 변경, s 매개변수입니다 및 연결 as I 에 대한 접속이 트랜잭션입니다 본질적으로 다른 것은 내가 살아 있는 준비한 성명에서 열고 닫을 간의 서로 다른 접속에만?

내가 생각하는 것을 통해 대부분 이 시점에서 더 잘 이해할 수 있지만 이런 것들을 어떻게 상호 바래요 돕는다구요 내려받습니다 가운데 가장 많은 혜택을 누릴 수 있다고요.

질문에 대한 의견 (1)

도움이 된다는 것에 한계가 있는 문이 모두 연결 풀링 (컴파일됨) 및 응벌을 없고 그냥 툴과도 똑같이 가능한 모든 상황에 맞는 외곽진입 수 있습니다. 이를 염두에 두고, 한 때 사용할 수 있는 너희에게베풀어진 let& # 39 의 연결 풀링을 및 응벌을 명령문입니다.

  • 사용 가능한 이유는 연결 풀링을 *

예를 들어, 연결 풀링을 접속에만 값이 비싼 때 유용합니다.

      • 연결하는 데 상당한 시간이 걸린다 (네트워크 연결이 SQL Server 또는 Oracle DB), 것이 &quot cache"; 오픈 접속에만 시도가 시스템 성능 향상.
      • 공유됨 연결은 및 제한된 응용 프로그램 내에서 (웹 애플리케이션 서버 접속이 동시에 여러 요청률 () 또는 응용 프로그램 간의 그들이 할 수 있도록 릴리즈됨 해야한단말입니다 다른 클라이언트와 계속하시겠습니까.
  • 사용 가능한 이유는 응벌을 명령문입니다 *

단지 그 아래로 줄여 성능 향상을 위해 재사용 가능한 쿼리합니다 응벌을 명령문입니다 구문 분석 하게하면서요.

  • SQLite: # 39 의 what& 가능* 최선의 선택이다.

정답은 어플리케이션 요구 사항에 따라 다릅니다. # 39, m 은 SQLite 경우 연결 풀링을 I& 개인적으로 좋은 선택이 반드시 확실하지 않다. 만약 단일 스레드 응용 프로그램에서 사용할 수도 있지만, 단일 연결 될 수 있는 최고의 영구적입니다 SQLite 데이터베이스 (db) 를 사용할 수 있는 것보다 훨씬 빨리 풀 구성 및 아니하였으매 응벌을 명령문입니다 너무. 이 SQL 서버에 있는 것은 매우 합리적인 기본 연결 풀링을 다르다.

만약 낮은 성능 문제 여부를 확인하기 위해 응용 프로그램을 프로파일할 말해둘꼐요 합니다 SQLite 연결 풀링을 책정안 단축시킵니다 유용합니다.

  • 관련 질문 *

대부분 '현재' 시스템.다타지스크 라이트 제공업체입니다 [출처] [1] 답변 관련이 있습니다.

&gt. 만약 제가 열고 닫는 내 연결 (nsr/res 짓궂군요 수도, 그렇지 않을 수도 있다. &gt. 그럼 얼마나 단힌 인해 접속 중인 스레드 풀) &gt. 내가 사용하여 성능을 발휘할 수 있는 준비한 성명에서?

대개의 경우 연결 풀로 치료해야 할 밖으로 나오지 않는 것이 좋습니다 새, 즉 모든 응벌을 제표를 이전에 혜택을 얻을 수 있을 것으로 기대하고 있다. 성명은 적립율은 &quot re-prepared"; 모두 유지할 경우 명령 및 연결.

&gt. 그러나 내가 꼭 이래야겠어요 혜택을 볼 절약합니다 don& # 39 한 안 믿는다. &gt. 객체의 트랜잭션까지 연결이 닫으십시오 때문에 내가 한 번 &gt. 이제 시작한 첫 생성된 준비한 성명에서 객체인지 &gt. 손실됩니다. 이것이 진정한 기술서임을?

이것이 진정한 발표했다.

&gt. 만약 내가 스크리테코먼드 만들 수 있는 쿼리하지 나타내는 내아기마저도 &gt. 자주 실행하는 것을 막을 수 있는 메모리를 스크리테코먼드 필요합니까? &gt. 유지하기 위해 준비한 성명에서 활성화됨?

Yes, you need to keep it. '스크리테코먼드 응벌을 대한 참조입니다' 는 성명을 발표했다.

&gt. 만약 내가 기술서임을 이것은 SQLite 와 동일한 스크리테코먼드 새로 만듭니다. &gt. 새로운 스크리테코먼드 있음을 이전 및 동일합니다. &gt. 이렇게 준비한 성명에서 는 사용할 수 있는?

39, 내가 don& it& 것 같지는 않다 # 39 을 지원합니다.

&gt. 만약 내가 계속 스크리테코먼드 it& # 39 의 메모리 및 변경, s 매개 변수 및 &gt. as I 열고 닫을 연결, 서로 다른 연결 &gt. 내가 살아 준비한 성명에서 트랜잭션입니다 본질적으로 유지 &gt. 간의 서로 다른 접속에만?

'& # 39 의 경우' 스크리테코먼드 변경하십시오 연결, 기술서임을 적립율은 re-prepared&quot ";).

[1]: 트렁크 ci = http://system.data.sqlite.org/index.html/dir?

해설 (1)

39, t catch 핵심 문제를 정확히 내가 didn& 지정하십시오. 신앙이니라 문제는 어떻게 이렇게 리틀이에요 제표를 삽입하려면 불크 삽입하십시오 트랜잭션 한 시간.

다음은 이에 앞서 helper class I found 도움이 될 수 있습니다.

[SQLiteBulkInsertHelper.cs] (https://docs.google.com/file/d/0B5-wcgU-Ku-eMDNlY1R3SzByV00/edit? pli = 1)

이렇게 사용할 수 있습니다.

SQLiteBulkInsertHelper ContactBlk = new SQLiteBulkInsertHelper("","<Table Name>");
ContactBlk.AllowBulkInsert = true;
ContactBlk.AddParameter("", /*Column Data Type*/System.Data.DbType.Int64);
ContactBlk.AddParameter("", /*Column Data Type*/System.Data.DbType.String);
ContactBlk.Insert(new object[] {,});
ContactBlk.Flush();

시도해 볼 경우 그 문제에 대한 해결책을 볼 수 있습니다.

해설 (3)