在macOS上,我正在使用EventKit加载提醒。一切正常,但是在运行时第一次加载提醒时,它花费的时间比之后长。这意味着用户必须在启动应用程序后等待以查看任何提醒,这并不是很好。原生的提醒应用程序运行更快。
以下是一些代码:
import Cocoa
import EventKit
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
let semaphore = DispatchSemaphore(value: 0)
func applicationDidFinishLaunching(_ aNotification: Notification) {
testReminders()
}
func testReminders() {
let eventStore = EKEventStore()
let incompletePredicate = eventStore.predicateForIncompleteReminders(withDueDateStarting: Date(), ending: Date(), calendars: nil)
// Get the access permission first
eventStore.requestAccess(to: .reminder, completion: { (granted, error) in
// Now test
self.semaphore.signal()
for _ in 0..<10 {
self.startMeasuring(eventStore, predicate: incompletePredicate)
}
})
}
func startMeasuring(_ eventStore: EKEventStore, predicate: NSPredicate) {
semaphore.wait()
let start = DispatchTime.now()
// Get the reminders
eventStore.fetchReminders(matching: predicate, completion: { (incompletedReminders: [EKReminder]?) -> Void in
let end = DispatchTime.now()
// Print out the elapsed time
let nanoTime = end.uptimeNanoseconds - start.uptimeNanoseconds
let timeInterval = Double(nanoTime) / 1_000_000_000
print("elapsed: \(timeInterval)")
self.semaphore.signal()
})
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}
如果运行的是上述代码,请确保选中“应用程序沙箱”功能中的“日历”。
以下是输出(以秒为单位):
已过去:9.322825215
播放时间:0.045737709
拍摄时间:0.036359244
播放时间:0.03218976
拍摄时间:0.044998467
拍摄时间:0.034777283
播放时间:0.032737581
播放时间:0.04387221
拍摄时间:0.03941968
过去了:0.044008471
9秒太长了。我该如何解决?
答案 0 :(得分:0)
我遇到了同样的问题,似乎 Reminders sqlite 数据库需要真空/分析。我每次获取 12 秒,直到我这样做:
cd ~/Library/Reminders/Container_v1/Stores
sqlite <each .sqlite here>
VACUUM;
ANALYZE;
.quit