2017-05-18 37 views
6

Tôi đang sử dụng trình bao bọc FMDatabase cho SQLite3 trong Ứng dụng OSX của mình. Tôi làm tấn chèn vào cơ sở dữ liệu:Sự cố "Mở quá nhiều tệp" được sử dụng bởi FMDatabase/SQLite3

FMResultSet *results; 
results= [db executeQuery:@"select count(*) from `items` where key = ?",[keyPath lowercaseString],nil]; 

while([results next]) 
{ 
    if([results unsignedLongLongIntForColumnIndex:0]>0){ 
     updateOperation=TRUE; 
    } 
} 
[results close]; 

if(updateOperation){ 

    [db executeUpdate:@"update `items` set OSXsize=?,OSXOsize=?, OSXDate=?, UUID=?,sourceFile=?,tombStone=0,SandBoxBookMark=?,songname=?,albumartist=? where key=?", 
    size,originalSize, convertedDate,UUID,sourcePath,bookmark,fileName,albumArtist,[keyPath lowercaseString] , nil]; 
} 
else 
{ 
    [db executeUpdate:@"insert into `items`(key,filepath, OSXsize, OSXOsize, OSXdate,UUID,sourceFile,tombStone,SandBoxBookMark,songname,albumartist) values(?,?,?,?,?,?,?,0,?,?,?)", 
    [keyPath lowercaseString], dapPath, size,originalSize, convertedDate,UUID,sourcePath,bookmark,fileName,albumArtist, nil]; 
} 

tôi mở cơ sở dữ liệu một lần, tuy nhiên, tôi nhìn thấy 4725 + tập tin xử lý kèm theo như các ứng dụng tiến bộ trong giám sát hoạt động:

/Users/userA/Library/Containers/com.map-pin.Dapper/Data/Library/Application Support/com.map-pin.Dapper/dapperright.sqlite 
15 
16 
... 
4724 
4725 

Trả lời

0

Đây có phải là trong một ứng dụng đa luồng và làm bạn tạo và mở một trường hợp db mỗi khi bạn cập nhật/chèn một hàng? Bạn có [db close]; ở đâu đó không?

Bạn đã thử nghiệm FMDatabaseQueue?

+0

Sử dụng fmdatabasequeue bật tính năng ghi nhật ký đã tiết lộ bộ kết quả truy vấn không được đóng đúng cách – JeremyLaurenson

+0

Vui mừng khi biết bạn đã giải quyết nó. –

-1

Đối với người dùng chạy cơ sở dữ liệu của bạn, hãy chạy lệnh sau:

limit maxfiles 4096 16384 

Sau đó khởi động lại cơ sở dữ liệu. Bây giờ nó sẽ có thể xử lý các tập tin 16k.

Làm thế nào bạn kiên trì này cho OS X khởi động lại phụ thuộc vào phiên bản của OS X. Bạn sẽ tìm thấy nó bằng cách tìm kiếm trong công cụ tìm kiếm ưa thích của bạn

Các vấn đề liên quan