我正在制作一个使用大量提醒的Windows手机应用程序,我决定开始测试ScheduledActionService方法(添加,删除,替换,查找)的性能,以查看最快/最简单的方法这样做。
我开始测试,它花了1.5秒的时间删除了14个提醒,然后创建了新的14个提醒。使用find / replace需要相同的时间。这比我预期的要慢很多。该测试在HTC 8X上进行。然后我在三星Omnia 7上做了同样的事情,它的速度要快得多。更换14个提醒大约需要200ms。删除/添加大约慢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只是将字符串写入隔离存储中的文件。
为什么这会在速度更快的手机上运行得更慢?
编辑:无论该应用是WP7.1应用还是WP8应用,HTC 8X的结果都是一样的。