小编Fab*_*ler的帖子

长时间运行的方法中 Java 调试性能缓慢

更新:虽然我一年多前就问过这个问题,但仍然没有答案。出于好奇,我用 IntelliJ IDEA 重现了今天在 Eclipse 中观察到的问题。

问题

我最近正在调试一个类,其中包含执行大量操作的阻塞且长时间运行的方法。有趣的是,调试速度有时变化很大。我有一种感觉,速度与不同的调试方法(Step Into、Step Over、Step Return、Resume)相关。

用作实验的最小可重复示例

我写了一个最小的例子,可以在以下课程的帮助下重现和衡量我的感受:

java调试性能测试

测试类只是测量计数器在“长时间运行”操作中递增的频率。为了测试假设,我在调用之前设置了一个断点来停止程序longRunningOperation,然后应用不同的调试方法。

给定显示的断点,我使用不同的调试策略以不特定的顺序执行了多次重复测量(以最大限度地减少系统错误的可能性):

  1. Run:简单地执行程序(性能控制组)
  2. W/O Breakpoint:在没有断点的情况下以调试模式运行程序
  3. Resume : 在断点处暂停,然后恢复执行 (IntelliJ F9)
  4. Over:在断点处暂停,然后跳过长时间运行的方法 (IntelliJ F8)
  5. Into+Return:在断点处暂停,然后单步进入长时间运行的方法并单步退出(IntelliJ F7,然后SHIFT+F8
  6. Into+Resume:在断点处暂停,然后进入长时间运行的方法并恢复(IntelliJ F7,然后F9

实验结果

| #| 运行| 不带断点 | 简历 | 结束 | 进入+返回| 进入+简历 |
|----------|----------|----------------|-------- ---|----------|-------------|----------|
| 1 | 863342711 | …

java eclipse debugging performance intellij-idea

6
推荐指数
1
解决办法
2899
查看次数

使用Observable <void>或Observable <any>发出`null`值?

在某些情况下,异步操作的返回值不重要或根本不给出.在这些情况下,异步操作的方法签名通常定义Observable<any>Promise<any>作为返回值.

例如,Ionic2 NavController定义:

/** // ...
 * @returns {Promise} Returns a promise which is resolved when the transition has completed.
 */
 abstract remove(/* ... */): Promise<any>;
Run Code Online (Sandbox Code Playgroud)

在没有查看实际实现的情况下,我无法确定是否确实没有发出任何值(例如nullundefined),或者我是否可以从发出的值中提取一些有用的信息.

问题:Observable<void>

我没见过Observable<void>Promise<void>在野外.通过使用它可以清楚地发现没有有用的值.是否有任何技术原因不使用void带有可观察量的类型?或者为什么没有人用它来指定空值?

rxjs typescript reactivex angular

5
推荐指数
1
解决办法
3784
查看次数