電子メール メッセージを読み取って解析する次のコードを考えると...
val inbox = store.getFolder("Inbox")
inbox.open(Folder.READ_WRITE)
val messages = inbox.getMessages()
for (message <- messages) {
val from = InternetAddress.toString(message.getFrom())
if (from.contains(sender)) {
message.getContent() match {
case content: String => {
parse(content) match {
case Some(reading: SiteReading) => {
readings += reading
Logger.info(s"Message added. Subject: ${message.getSubject()}");
}
case _ => Logger.warn(s"Unable to process message. Ignoring. $content");
}
message.setFlag(Flags.Flag.DELETED, true);
}
case _ => Logger.error(s"Unknown message type sent from $sender.");
}
}
}
7行目case content: String =>
は本当に遅いです。解析関数が遅いと思っていましたが、サブミリ秒でプロファイリングした後、パターン マッチが原因である可能性があることに気が付きませんでした。パターン マッチには 250 ~ 300 ミリ秒かかります。
fromをjavax.mail
返すため、型をテストする必要があります。Object
message.getContent()
Scala 2.10.2 を使用しています。