Skip to content

Commit 96a8849

Browse files
committed
新增自动关闭数据库连接功能,减少性能损耗
1 parent 7fe646f commit 96a8849

File tree

4 files changed

+55
-7
lines changed

4 files changed

+55
-7
lines changed

Demo-iOS/iOS-Demo/AppDelegate.m

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,10 +177,11 @@ -(void)test
177177

178178

179179
///
180-
addText(@"休息2秒 开始 为了说明 是异步插入的\n"
180+
addText(@"休息25秒, 为了说明 是异步插入的\n, 测试自动关闭数据库连接的可用性"
181181
"rest for 2 seconds to start is asynchronous inserted to illustrate");
182182

183-
sleep(2);
183+
/// 测试 自动关闭数据库连接
184+
sleep(25);
184185

185186
addText(@"休息2秒 结束 \n rest for 2 seconds at the end");
186187

LKDBHelper.podspec.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "LKDBHelper",
3-
"version": "2.4.3",
3+
"version": "2.4.6",
44
"summary": "全自动的插入,查询,更新,删除, an automatic database operation thread-safe and not afraid of recursive deadlock",
55
"description": "全面支持 NSArray,NSDictionary, ModelClass, NSNumber, NSString, NSDate, NSData, UIColor, UIImage, CGRect, CGPoint, CGSize, NSRange, int,char,float, double, long.. 等属性的自动化操作(插入和查询)",
66
"homepage": "https://github.com/li6185377/LKDBHelper-SQLite-ORM",
@@ -10,7 +10,7 @@
1010
},
1111
"source": {
1212
"git": "https://github.com/li6185377/LKDBHelper-SQLite-ORM.git",
13-
"tag": "2.4.3"
13+
"tag": "2.4.6"
1414
},
1515
"platforms": {
1616
"ios": "4.3",

LKDBHelper/Helper/LKDBHelper.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ NS_ASSUME_NONNULL_BEGIN
4747
*/
4848
- (void)closeDB;
4949

50+
/**
51+
* @brief 当数据库无操作 多少秒后 自动关闭数据库连接, 区间 [10 ~ int_max] 默认:20秒
52+
*/
53+
- (void)setAutoCloseDBTime:(NSInteger)time;
54+
5055
/**
5156
* @brief current encryption key.
5257
*/

LKDBHelper/Helper/LKDBHelper.m

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ @interface LKDBHelper ()
5959
@property (nonatomic, copy) NSString *dbPath;
6060
@property (nonatomic, strong) NSMutableArray *createdTableNames;
6161
@property (nonatomic, strong) NSRecursiveLock *threadLock;
62+
63+
@property (nonatomic, assign) NSInteger lastExecuteDBTime;
64+
@property (nonatomic, assign) BOOL runingAutoCloseTimer;
65+
@property (nonatomic, assign) NSInteger autoCloseDBDelayTime;
66+
6267
@end
6368

6469
@implementation LKDBHelper
@@ -162,6 +167,9 @@ - (instancetype)initWithDBPath:(NSString *)filePath
162167
if (self) {
163168
self.threadLock = [[NSRecursiveLock alloc] init];
164169
self.createdTableNames = [NSMutableArray array];
170+
self.lastExecuteDBTime = [[NSDate date] timeIntervalSince1970];
171+
self.autoCloseDBDelayTime = 20;
172+
[self startAutoCloseTimer];
165173

166174
[self setDBPath:filePath];
167175
[LKDBHelper dbHelperWithPath:nil save:self];
@@ -265,14 +273,13 @@ - (void)executeDB:(void (^)(FMDatabase *db))block
265273
return;
266274
}
267275
[self.threadLock lock];
268-
276+
269277
if (self.usingdb != nil) {
270278
block(self.usingdb);
271279
} else {
272280
if (self.bindingQueue == nil) {
273281
self.bindingQueue = [[FMDatabaseQueue alloc] initWithPath:self.dbPath
274282
flags:LKDBOpenFlags];
275-
[self.createdTableNames removeAllObjects];
276283
[self.bindingQueue inDatabase:^(FMDatabase *db) {
277284
db.logsErrors = LKDBLogErrorEnable;
278285
if (_encryptionKey.length > 0) {
@@ -286,10 +293,45 @@ - (void)executeDB:(void (^)(FMDatabase *db))block
286293
self.usingdb = nil;
287294
}];
288295
}
289-
296+
297+
self.lastExecuteDBTime = [[NSDate date] timeIntervalSince1970];
298+
299+
if (!self.runingAutoCloseTimer) {
300+
[self startAutoCloseTimer];
301+
}
302+
290303
[self.threadLock unlock];
291304
}
292305

306+
- (void)setAutoCloseDBTime:(NSInteger)time {
307+
if (time < 10) {
308+
time = 10;
309+
}
310+
self.autoCloseDBDelayTime = time;
311+
}
312+
313+
- (void)startAutoCloseTimer {
314+
self.runingAutoCloseTimer = YES;
315+
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(self.autoCloseDBDelayTime * NSEC_PER_SEC)), dispatch_get_global_queue(0, 0), ^{
316+
[self.threadLock lock];
317+
self.runingAutoCloseTimer = NO;
318+
BOOL hasClosed = [self autoCloseDBConnection];
319+
if (!hasClosed) {
320+
[self startAutoCloseTimer];
321+
}
322+
[self.threadLock unlock];
323+
});
324+
}
325+
326+
- (BOOL)autoCloseDBConnection {
327+
NSInteger now = [[NSDate date] timeIntervalSince1970];
328+
if (now - self.lastExecuteDBTime > 10) {
329+
[self closeDB];
330+
return YES;
331+
}
332+
return NO;
333+
}
334+
293335
- (BOOL)executeSQL:(NSString *)sql arguments:(NSArray *)args
294336
{
295337
__block BOOL execute = NO;

0 commit comments

Comments
 (0)