我正在制作一个使用大量提醒的 Windows 手机应用程序,我决定从测试 ScheduledActionService 方法(添加、删除、替换、查找)的性能开始,看看什么是最快/最简单的方法.
我开始测试,应用程序花了 1.5 秒删除 14 个提醒,然后创建新的 14 个提醒。查找/替换花费了相同的时间。这比我预期的要慢得多。该测试是在 HTC 8X 上进行的。然后我在三星 Omnia 7 上做了同样的事情,而且速度要快得多。替换 14 个提醒大约需要 200 毫秒。删除/添加慢了大约 100 毫秒。两个测试都没有调试,我做了好几次,看看它是否是随机的,不是。
这是测试的代码:
public void RefreshReminders() {
var st = new System.Diagnostics.Stopwatch();
st.Start();
foreach (var reminder in ScheduledActionService.GetActions<Reminder>()) {
ScheduledActionService.Remove(reminder.Name);
}
for (int i = 0; i < 14; i++) {
string reminderName = i.ToString();
Reminder reminder = new Reminder(reminderName);
reminder.Title = "Reminder";
reminder.Content = string.Format("Some data: {0}", i);
reminder.BeginTime = DateTime.Now.AddSeconds(2000);
reminder.RecurrenceType = RecurrenceInterval.None;
ScheduledActionService.Add(reminder);
}
st.Stop();
LogToIS("Reminders replaced (remove/add) in: " + st.ElapsedMilliseconds + "ms");
st = new System.Diagnostics.Stopwatch();
st.Start();
for (int i = 0; i < 14; i++) {
string reminderName = i.ToString();
Reminder reminder = (Reminder)ScheduledActionService.Find(reminderName);
reminder.Content = string.Format("Some data: {0}", i + 5);
reminder.BeginTime = DateTime.Now.AddSeconds(2000);
ScheduledActionService.Replace(reminder);
}
st.Stop();
LogToIS("Reminders replaced (find/replace) in: " + st.ElapsedMilliseconds + "ms");
}
LogToIS 只是将字符串写入隔离存储中的文件。
任何想法为什么这会在速度更快的手机上运行得更慢?
编辑: HTC 8X 上的结果是一样的,无论应用程序是 WP7.1 应用程序还是 WP8 应用程序。