Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每次访问数据库、文件或hashmap时计算逻辑是否更快?_Java_Android_Performance - Fatal编程技术网

Java 每次访问数据库、文件或hashmap时计算逻辑是否更快?

Java 每次访问数据库、文件或hashmap时计算逻辑是否更快?,java,android,performance,Java,Android,Performance,我有一个逻辑,当我的用户按下一个按钮时,它会经常被执行。然而,我有这样一个想法:如果我只是把这些信息存储在一个表中,并在需要的时候抓住它,而不是每次都计算它,也许效率会更高 那么我们来看看:哪个流程消耗的处理时间/资源最少 背景信息:对象数组平均可能有10个项目,尽管该对象的一个成员变量是另一个最多有4个项目的数组。而且,每次这个对象改变,它都会被发送到应用程序引擎在C++中,按钮纹理在前端被改变。这个应用程序引擎一直在运行高优先级进程,不能因为UI线程中的大量工作而减慢速度 此外,如果要创建任

我有一个逻辑,当我的用户按下一个按钮时,它会经常被执行。然而,我有这样一个想法:如果我只是把这些信息存储在一个表中,并在需要的时候抓住它,而不是每次都计算它,也许效率会更高

那么我们来看看:哪个流程消耗的处理时间/资源最少

背景信息:对象数组平均可能有10个项目,尽管该对象的一个成员变量是另一个最多有4个项目的数组。而且,每次这个对象改变,它都会被发送到应用程序引擎在C++中,按钮纹理在前端被改变。这个应用程序引擎一直在运行高优先级进程,不能因为UI线程中的大量工作而减慢速度

此外,如果要创建任何数据库、文件、HashMap等,它将包含大约100行整数。HashMap可能能够将其中一些压缩为公共键/值对

1这不是一个糟糕的解决方案,但我觉得它在上下文中是多余的,可以改进 我还没有写这些,所以请容忍我的伪代码

2可能正在访问的通用文件 获取文件。 从文件中获取x行 相应地设置对象数组。 3本地静态数据库我觉得访问数据非常慢 获取本地静态数据库的Dao对象 启动简单查询 存储结果 相应地设置对象数组 4 HashMap可能正在创建中,但O1访问。必须在每次应用程序启动时实例化 在应用程序初始化时设置hashmap getx 相应地设置对象数组
这取决于你的使用情况。一般来说,用户的本地电话存储非常昂贵,您不想用不必要的数据填充它。另一方面,如果您认为您的按钮会被用户频繁按下,那么HashMap可能是一个更好的选择。但是,每次实例化HashMap都会影响内存使用,具体取决于大小——您可以延迟实例化HashMap。否则,除非你在做一些繁重的科学计算,否则每次计算逻辑都可能是你的最佳选择。

Benchmark。这里没有通用的答案,当访问时间等之间存在巨大差异时,时间复杂度就意味着什么。代码不仅仅是性能问题。可维护性是一个问题。您认为人们希望维护您的第一个解决方案吗?使用变量x和i只对编写它的人有意义。我不是说第一个变量是可读的,它几乎是神奇的逻辑。这就是为什么我想将这些值存储在其他地方的部分原因,因为我需要的数据不是完全动态的。我可以为用户输入的数字设置一个上限,这可能是1到4之间的竞争。如果您的逻辑保持如此简单,那么它肯定比访问数据库或文件快,特别是因为文件也需要解析。延迟加载。从内存加载比从数据库或文件加载快得多。
    if (x % 3 == 0) {
        for (int i = 0; i < objectArray.size(); i+= 3) {
            objectArray.get(i).y = FOO_VALUE;
        }
    } else if (x % 3 == 1) {
        if (i % 3 == 0) {
            if (i + 7 <= x) {
                i += 3;
            } else if (i + 2 <= x) {
                i += 2;
            }
        } else if (i % 2 == 0) {
            if (i + 2 <= x) {
                i += 2;
            }
        }
    } else { // == 2
        if (i % 3 == 0) {
            if (i + 3 <= x) {
                i += 3;
            }
        } else
            i += 2;
    }