NHibernate 3.3 및 Firebird 2.5.1 성능 문제가 있습니다. ASP.NET MVC와 로컬 (!) 파이어 버드 데이터베이스를 사용하여 아주 간단한 예제를 만들었습니다. 그러나 다음 코드는 실행에 약 1 초가 걸립니다.NHibernate 및 Firebird 성능 문제
var startTickCountWrite = Environment.TickCount;
IRepository<Project> repository = facade.ProjectRepository(null);
for (int i = 1; i <= 250; ++i)
{
var myProject = new Project { ProjectId = i };
repository.Insert(myProject);
}
repository.Commit();
var endTickCountWrite = Environment.TickCount;
for 루프 내부에 commit()을 삽입하면 약 5 초가 걸립니다!
뒤에 저장소 및 외관은 특별한 것이 아닙니다. 프로젝트를 ISession.Forsert로 전달합니다.
프로젝트에는 속성으로 ID와 ProjectID 만 있습니다.
아무도 나에게 무슨 일이 잘못되고 있다고 말할 수 있습니까?
감사합니다, 안드레아스 1 초
그래서 1 초 안에 알 수없는 하드웨어/메모리 구성으로 오픈 소스 데이터베이스에 250 개의 삽입을하고 있는데 이것이 좋지 않다고 생각하십니까? –
_When_ DBMS에 연결하고 있습니까? 아마도 실제로 필요한 때까지 연결이 설정되지 않았으므로이 1 초의 대부분은 DBMS에 연결하는 데 소비 될 수 있습니다. Commit in loop에 관해서는, 이것은 꽤 기대됩니다 - 당신은 내구성 가격을 지불하고 있습니다. 트랜잭션은 ACID 일 필요가 있지만 트랜잭션의 끝에서만 "내구성"을 적용해야합니다. 따라서 디스크에 대한 물리적 입출력은 분명한 SQL 문 실행 후에 연기 될 수 있으며 트랜잭션이 다른 명령문을 처리하는 동안 백그라운드에서 실제로 수행 될 수 있습니다. 귀하의 거래가 너무 세분화되어 있다면 당신은 그것을 물리 칠 수 있습니다. –