Java MimeMessage.saveChanges非常慢

Java MimeMessage.saveChanges非常慢,java,junit,jakarta-mail,mime-message,Java,Junit,Jakarta Mail,Mime Message,由于包含m.saveChanges(),执行以下测试大约需要5秒钟 这里有什么问题?我可以模拟什么来加快速度?首先修复代码中的错误 可能会影响某些机器的性能。对于JDK,您可以更改缓存DNS查找的安全属性或设置系统属性。JDK 7和更高版本中的默认行为在缓存方面做得很好,因此您不必更改这些设置 您最好使用会话属性来避免某些此类查找 设置的会话属性(不是协议版本),因为这将阻止在上查找名称。调用、或将触发调用以获取本地地址。如果未设置上述属性,则此方法将尝试查询主机名。通过设置属性,此方法将从会话

由于包含
m.saveChanges()
,执行以下测试大约需要5秒钟

这里有什么问题?我可以模拟什么来加快速度?

首先修复代码中的错误

可能会影响某些机器的性能。对于JDK,您可以更改缓存DNS查找的安全属性或设置系统属性。JDK 7和更高版本中的默认行为在缓存方面做得很好,因此您不必更改这些设置

您最好使用会话属性来避免某些此类查找

  • 设置的会话属性(不是协议版本),因为这将阻止在上查找名称。调用、或将触发调用以获取本地地址。如果未设置上述属性,则此方法将尝试查询主机名。通过设置属性,此方法将从会话中提取主机名字符串,而不是尝试昂贵的DNS查找
  • 设置的会话属性以防止在HELO命令上查找名称
  • 设置的会话属性以防止在EHLO命令上查找
  • 或者,如果您的代码依赖于,则可以将系统属性设置为
    false
    ,但如果您应用了点#1,则会处理此问题
  • 对于IMAP,您可以尝试设置为默认值
    false
  • 由于您没有传输邮件,请通过将代码更改为以下方式应用规则#1:

    @Test
    public void test1() throws MessagingException, IOException {
        Properties props = new Properties();
        props.put("mail.host", "localhost"); //Or use IP.
        Session s = Session.getInstance(props);
        MimeMessage m = new MimeMessage(s);
        m.setContent("<b>Hello</b>", "text/html; charset=utf-8");
        m.saveChanges();
        assertEquals(m.getContent(), "<b>Hello</b>");
        assertEquals(m.getContentType(), "text/html; charset=utf-8");
    }
    
    @测试
    public void test1()引发MessaginException,IOException{
    Properties props=新属性();
    props.put(“mail.host”、“localhost”);//或使用IP。
    sessions=Session.getInstance(props);
    MimeMessage m=新MimeMessage(s);
    m、 setContent(“Hello”,“text/html;charset=utf-8”);
    m、 保存更改();
    assertEquals(m.getContent(),“Hello”);
    assertEquals(m.getContentType(),“text/html;charset=utf-8”);
    }
    
    如果要传输消息,请结合规则#1、#2和#3,这将阻止访问主机系统进行名称查找。如果要防止在传输过程中进行所有DNS查找,则必须使用IP地址

    Session s = mock(Session.class);
    when(s.getProperties()).thenReturn(new Properties());
    
    @Test
    public void test1() throws MessagingException, IOException {
        Properties props = new Properties();
        props.put("mail.host", "localhost"); //Or use IP.
        Session s = Session.getInstance(props);
        MimeMessage m = new MimeMessage(s);
        m.setContent("<b>Hello</b>", "text/html; charset=utf-8");
        m.saveChanges();
        assertEquals(m.getContent(), "<b>Hello</b>");
        assertEquals(m.getContentType(), "text/html; charset=utf-8");
    }