【问题标题】:Problem processing large data using Applet-Servlet communication使用 Applet-Servlet 通信处理大数据的问题
【发布时间】:2010-06-10 19:39:01
【问题描述】:

我有一个向 Servlet 发出请求的 Applet。在 servlet 上,它使用 PrintWriter 将响应写回 Applet:

out.println("Field1|Field2|Field3|Field4|Field5......|Field10");

大约有 15000 条记录,所以 out.println() 被执行了大约 15000 次。

问题是当 Applet 从 Servlet 获得响应时,处理记录大约需要 15 分钟。 我放置了 System.out.println's 并在 5000 左右暂停处理,然后在 15 分钟后继续处理,然后完成。

有人遇到过类似的问题吗? servlet 大约需要 2 秒的时间来执行。看来浏览器/Applet 处理记录太慢了。

这是小程序代码。有时它只在第一个 System.out 上停止,有时在第二个 System.out 上停止。

while ((line = in.readLine()) != null) {
    System.out.println("Reading from stream....");
    datavector.add(line);
    System.out.println("Vector size="+datavector.size()+"  Line added="+line);
}

任何想法表示赞赏。

谢谢。

【问题讨论】:

    标签: java servlets applet printwriter


    【解决方案1】:

    您的问题是否与“处理暂停大约 5000 条记录,然后在 15 条记录后自行开始”有关?或者您的小程序处理速度很慢

    如果你代码发布一些代码sn-p会有帮助吗?

    【讨论】:

    • 您好,油井处理在 5000 之后停止,然后在 15 分钟后重新开始。那么为什么处理会停止呢? Java 在做什么?有没有办法提高性能?
    • 我猜在大约 5000 条记录之后,系统正在尝试 GC 一些未使用的对象。我认为在 IE 浏览器中,如果您打开 java 控制台,它会显示内存使用情况等命令。所以您应该尝试一下。或者,只需在您的小程序中定义一个 main 方法并将其作为 java 应用程序运行,然后查看是否停止大约 5000 条记录。可能会给您一些提示,该问题是与浏览器相关还是与整个代码相关。让我们知道您发现了什么。
    • 好的,我上周完成了这项工作。问题是代码执行了非常繁重的字符串操作。代码在嵌套循环中多次执行 str = str + "name1" + "name2" 之类的操作。通过切换到 StringBuffer 处理时间从 20 分钟到 15 秒!!!感谢您的所有回复。
    【解决方案2】:

    while 循环中删除System.out.println() 行。你每萨尔多打电话给System.out.println() 30,000 次。这会增加 很多 开销。如果需要,只需在 while 循环之前和之后放置一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多