为什么要关闭数据库连接,可以不关闭吗?
首先要说明的是连接数是有限制的: 代码如下: for ( int i = 0; i 10000; i++){ SqlConnection conn = new SqlConnection( @Data Source=.\SQLEXPRESS; AttachDbFilename= E:\DB\NORTHWND.mdf ; Integrated Security=True;Connect Timeout=30;User Instance
首先要说明的是连接数是有限制的:
代码如下:
<span>for</span> (<span>int</span> i = 0; i new SqlConnection(<span>@"Data Source=.\SQLEXPRESS; AttachDbFilename="</span><span>"E:\DB\NORTHWND.mdf"</span><span>"; Integrated Security=True;Connect Timeout=30;User Instance=True"</span>); conn.Open(); Console.WriteLine(<span>"打开了{0}个连接"</span>, i); }
运行结果如下:
过一会就会提示打开连接超时了:
可以看到数据库连接时有限制的,如果连接不关闭,而且使用的人比较多,那么系统很快就down掉了。
但是有时候由于某些原因应用程序可能只是几个人使用,所以就有人设计了:
在应用程序启动的时候打开数据库连接,在应用程序关闭的时候关闭数据库连接
那么使用这种方式有什么问题呢?
首先假设有一张表Nums,表定义如下:
Main代码如下:
SqlConnection conn = <span>new</span> SqlConnection(<span>@"Data Source=.\SQLEXPRESS; AttachDbFilename="</span><span>"E:\DB\NORTHWND.mdf"</span><span>"; Integrated Security=True;Connect Timeout=30;User Instance=True"</span>); conn.Open(); Parallel.For(1, 9999, (id) => { ExecuteCommand(conn, id); });
就是从1到9999开始执行ExecuteCommand
ExecuteCommand代码如下:
<span>private</span> <span>static</span> <span>void</span> ExecuteCommand(SqlConnection conn, <span>int</span> id) { Console.WriteLine(<span>"正在执行."</span> + id); Thread.Sleep(100); SqlCommand cmd = <span>new</span> SqlCommand( <span>string</span>.Format(<span>"Insert into Nums values('{0}') "</span>, id), conn); cmd.ExecuteNonQuery(); }
运行:
可以看到ExecuteNonQuery方法抛出了异常,原因是连接处于关闭状态。
可是我们的连接一直都是open着的啊,并没有调用close,dispose之类的方法啊。
于是在ExecuteCommand前面增加判断条件:
<span>if</span> (conn.State != System.Data.ConnectionState.Open) conn.Open();
再次运行:
可以看到还是会出现连接已关闭的问题。你知道什么原因吗?
这里是由于多线程环境引起的。所以需要加锁。
<pre class="brush:php;toolbar:false"><span>private</span> <span>static</span> <span>object</span> syncObj = <span>new</span> <span>object</span>();
<span>private</span> <span>static</span> <span>void</span> ExecuteCommand(SqlConnection conn, <span>int</span> id)
{
<span>lock</span> (syncObj)
{
<span>if</span> (conn.State != System.Data.ConnectionState.Open)
conn.Open();
Console.WriteLine("<span>正在执行..</span>" + id);
Thread.Sleep(100);
SqlCommand cmd = <span>new</span> SqlCommand(
<span>string</span>.Format("<span>Insert into Nums values('{0}') </span>", id), conn);
cmd.ExecuteNonQuery();
}
}
再次运行:可以发现基本没问题了.
修改Parallel.For的最大值上限,要测试下是否可以长期执行了。
<pre class="brush:php;toolbar:false">Parallel.For(1, Int32.MaxValue, (id) =>
{
ExecuteCommand(conn, id);
});
一天测试下来,没出现任何问题。
结论:对于某些只有几个人使用的应用程序,可以不关闭数据库连接,但是在写代码的时候最好要加上连接是否打开的判断。
你有什么好的看法呢,欢迎留下!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP는 AI 이미지 처리를 직접 수행하지는 않지만 API를 통해 통합됩니다. 컴퓨팅 집약적 작업보다는 웹 개발에 적합하기 때문입니다. API 통합은 전문 노동 분업을 달성하고 비용을 줄이며 효율성을 향상시킬 수 있습니다. 2. 주요 기술 통합에는 guzzle 또는 curl을 사용하여 HTTP 요청을 보내기, JSON 데이터 인코딩 및 디코딩, API 키 보안 인증, 비동기 큐 처리 시간이 소요되는 작업, 강력한 오류 처리 및 재 시도 메커니즘, 이미지 저장 및 디스플레이가 포함됩니다. 3. 일반적인 과제로는 제어 불가능한 API 비용, 통제 할 수없는 생성 결과, 사용자 경험 저하, 보안 위험 및 어려운 데이터 관리가 포함됩니다. 응답 전략은 사용자 할당량 및 캐시를 설정하여 Propt 안내 및 다중 피트 선택, 비동기 알림 및 진행 프롬프트, 주요 환경 가변 스토리지 및 컨텐츠 감사 및 클라우드 스토리지를 제공합니다.

AI 감정 컴퓨팅 기술을 PHP 애플리케이션에 통합하려면 Core는 감정 분석에 클라우드 서비스 AIAPI (예 : Google, AWS 및 Azure)를 사용하고 HTTP 요청을 통해 텍스트를 보내고 JSON 결과를 반환하고 감정 데이터를 데이터베이스에 저장하여 자동화 된 처리 및 사용자 피드백의 데이터를 실현하는 것입니다. 특정 단계는 다음과 같습니다. 1. 정확성, 비용, 언어 지원 및 통합 복잡성을 고려하여 적절한 AI 감정 분석 API를 선택합니다. 2. Guzzle 또는 Curl을 사용하여 요청을 보내고 감정 점수, 레이블 및 강도 정보를 저장하십시오. 3. 우선 순위 정렬, 추세 분석, 제품 반복 방향 및 사용자 세분화를 지원하기 위해 시각적 대시 보드를 구축하십시오. 4. API 통화 제한 및 숫자와 같은 기술적 과제에 대한 응답

시드기 파일 생성 : Phpartisanmake : SeederUserseeder를 사용하여 시드기 클래스를 생성하고 실행 메소드에서 모델 팩토리 또는 데이터베이스 쿼리를 통해 데이터를 삽입하십시오. 2. DatabaseSeeder의 다른 시드러에게 전화하십시오 : REGISTERESEEDER, POSTSEEDER 등 $ this-> Call ()을 통해 종속성이 올바른지 확인하십시오. 3. 시드러 실행 : phpartisandb를 실행하십시오 : 씨앗을 모두 등록 된 시드기를 실행하거나 phpartisangymigrate를 사용하십시오 : 신선한-데이터를 재설정하고 리필하십시오. 4

디렉토리 비트 코인이란 무엇입니까? 비트 코인은 어떻게 작동합니까? 비트 코인이 확장 가능하지 않은 이유는 무엇입니까? BIP 란 무엇입니까 (비트 코인 개선 제안)? Bitcoin Taproot 업데이트 란 무엇입니까? TapRoot (P2TR)에 대한 지불 : TapRoot의 이점 : 우주 절약 개인 정보 보호 이점 보안 업그레이드 결론 : 비트 코인은 타사를 사용하지 않고 자금을 송금하고받을 수있는 최초의 디지털 통화입니다. 비트 코인은 다른 소프트웨어와 마찬가지로 소프트웨어이므로 업데이트 및 버그 수정이 필요합니다. Bitcoin Taproot는 Bitcoin에 새로운 기능을 소개하는 업데이트입니다. cryptocurrency는 이제 뜨거운 주제입니다. 사람들은 몇 년 동안 그것에 대해 이야기 해 왔지만 지금은 가격이 급격히 상승하면서 갑자기 모든 사람들이 참여하고 투자하기로 결정했습니다. 메시지

Binance 계정을 등록하지 않으면 주로 지역 IP 봉쇄, 네트워크 이상, KYC 인증 실패, 계정 복제, 장치 호환성 문제 및 시스템 유지 보수로 인해 발생합니다. 1. 네트워크 안정성을 보장하기 위해 제한되지 않은 지역 노드를 사용하십시오. 2. 명확하고 완전한 인증서 정보를 제출하고 국적을 일치시킵니다. 3. 결합되지 않은 이메일 주소로 등록하십시오. 4. 브라우저 캐시를 청소하거나 장치를 교체하십시오. 5. 유지 보수 기간을 피하고 공식 발표에주의를 기울이십시오. 6. 등록 후 즉시 2FA를 활성화하고, 화이트리스트 및 반입 방지 코드를 주소화 할 수 있습니다.이 코드는 10 분 이내에 등록을 완료하고 90%이상 보안을 개선하고 준수 및 보안 폐쇄 루프를 구축 할 수 있습니다.

Stablecoins는 안정적인 가치, 안전한 속성 및 광범위한 응용 프로그램 시나리오에 매우 유리합니다. 1. 시장이 폭력적으로 변동될 때, Stablecoins는 투자자들이 이익을 잠그거나 손실을 피하는 데 도움이되는 안전한 피난처 역할을 할 수 있습니다. 2. 효율적인 거래 매체로서 Stablecoins는 화폐 통화와 암호화 세계를 빠른 거래 속도와 낮은 취급 수수료와 연결하고 풍부한 거래 쌍을 지원합니다. 3. 그것은 분산 된 금융 (Defi)의 초석입니다.

UseConnectionPoolingwithHikArictoreUsedAabaseConnectionsAndUceOverHead.2.usepRepRedStatementTopReventSQlinejectAndimProveQueryPerformance.3.fetchOnlyRequiredDatabySelectingSpecificColumnSandApplyingFilterSandPagination.4.useBatchOperationStor

비트 코인의 총량은 2,100 만으로 알고리즘 설계에 의해 결정되는 변하지 않는 규칙입니다. 1. 작업 메커니즘과 210,000 블록마다 절반의 발행 규칙을 통해 새로운 동전 발행은 기하 급수적으로 감소했으며 추가 발행은 최종적으로 2140.2에 중단되었습니다. 총 210 만 금액은 동등한 스케일 시퀀스를 합산함으로써 도출됩니다. 초기 보상은 50 비트 코인입니다. 각 절반 이후, 합의 합은 2,100 만으로 수렴됩니다. 코드에 의해 굳어지고 변조 할 수 없습니다. 3. 2009 년 출생 이후, 4 개의 절반 행사는 모두 가격을 상당히 주도했으며, 부족 메커니즘의 효과를 확인하고 세계적 합의를 형성했습니다. 4. 고정 총계는 비트 코인 반 인플레이션 및 디지털 옐로우 메탈리티를 제공하며, 시장 가치는 2025 년에 미화 2.1 조 달러를 초과하여 세계에서 5 번째로 큰 자본이되었습니다.
