相关疑难解决方法(0)

矢量初始化比数组慢...为什么?

我尝试了两件事:(下面的伪代码)

int arr[10000];
for (int i = 0; i < 10000; i++)
{
   for (int j = 0; j < 10000; j++)
   {
       arr[j] = j;
   }
}
Run Code Online (Sandbox Code Playgroud)

vector<int> arr(10000);
for (int i = 0; i < 10000; i++)
{
   for (int j = 0; j < 10000; j++)
   {
       arr[j] = j;
   }
}
Run Code Online (Sandbox Code Playgroud)

我运行了两个程序并使用"time"shell命令对其进行了计时.程序1在5秒内运行,程序2在30秒内运行.我打开了编译器优化的两个程序,两个程序大约在同一时间运行(0.38s).我对这些结果感到困惑.有人可以向我解释为什么会这样吗?

谢谢!

c++ optimization performance vector

8
推荐指数
3
解决办法
1153
查看次数

您如何证明一种算法比另一种算法更有效?

我不是专业的程序员,我也不研究它.我是一名航空航天学生,为我的毕业论文做了一个数字方法,并编写了一个程序来证明它是有效的.

我做了几种方法并实现了几种算法,并试图证明为什么不同的情况需要他们自己的算法来解决任务.

我用数学方法做了这个证明,但是有些算法是如此具体,以至于我确实知道他们做了什么并且他们做得对,但很难找到一个数学函数或某些东西来显示它有多少次迭代或循环直到它完成.

所以,我想知道你是如何进行这种比较的.你是否也提出了一个数学函数,或者你只是对这两种算法进行了最快速的测试,如果你以数学方式进行,你是如何做到的?你在大学期间学到了这个,或者怎么样?

安德烈亚斯,提前谢谢你

algorithm math comparison performance

8
推荐指数
3
解决办法
5635
查看次数

循环效率 - C++

初学者质疑,关于循环效率.我已经开始用C++编程(我的第一语言),并且一直在使用Bjarne Stroustrup的'Principles and Practice Using C++'.我已经完成了前面几章的介绍,并且刚刚介绍了循环的概念.

关于循环的第一个练习请求如下:字符'b'是char('a'+ 1),'c'是char('a'+ 2)等.使用循环写出一个表具有相应整数值的字符:

a 97,b 98,...,z 122

虽然,我使用大写,我创建了以下内容:

int number = 64; //integer value for @ sign, character before A
char letter = number;//converts integer to char value
int i = 0;

while (i<=25){
    cout << ++letter << "\t" << ++number << endl;
    ++i;
    }
Run Code Online (Sandbox Code Playgroud)

我应该只针对"我"出现在一个循环中,还是在类型之间转换时根本不可能?除了将字符值转换为它的整数对应物(即当前方法的反面)或根本没有转换并且具有字母存储'@'之外,我无法想到除上述任何其他方式之外的其他方式.

c++ performance loops

8
推荐指数
2
解决办法
3855
查看次数

如果达到了结束条件,是否可以在C++中退出for a before?

我想知道当验证结束条件(不同于正确的迭代次数)时是否可以在C++中结束for循环.例如:

for (int i = 0; i < maxi; ++i)
    for (int j = 0; j < maxj; ++j)
        // But if i == 4 < maxi AND j == 3 < maxj, 
        // then jump out of the two nested loops.
Run Code Online (Sandbox Code Playgroud)

我知道这可能在Perl中使用下一个LABEL或最后一个LABEL调用和标记的块,是否可以在C++中执行它或者我应该使用while循环?

谢谢.

c++ label loops nested-loops

7
推荐指数
7
解决办法
3853
查看次数

C#文件I/O效率

我做了一个家庭作业,这里是问题陈述:

您的程序应该如下工作:

  1. 要求用户提供文件名.获取文件名并保存.
  2. 打开文件.
  3. 从文件中读取温度和风速.这两个值都应存储在声明为double的变量中.该文件是文本文件.文件的每一行包含温度和风速值.
  4. 使用程序员编写的方法计算风寒因子,并以下列形式显示结果:

    对于t =来自file的温度和v =来自文件的风速Wind chill index =计算结果华氏度.

    显示小数点后两位数的所有数字.(记住 - 没有神奇的数字!)

  5. 重复这些步骤,直到遇到文件结尾.

我已经完成了作业,我的代码在下面,我只是想知道是否有任何方法可以提高效率,或者如果有一些不同的创造性方法来解决这个问题,我已经把它转到了50/50 ,但我很好奇你们有些高级和熟练的程序员会如何解决这个问题.

using System;
using System.IO;

class Program
{
    // declare constants to use in wind chill factor equation - no magic numbers
    const double FIRST_EQUATION_NUMBER = 35.74;
    const double SECOND_EQUATION_NUMBER = 0.6215;
    const double THIRD_EQUATION_NUMBER = 35.75;
    const double FOURTH_EQUATION_NUMBER = 0.4275;
    const double EQUATION_EXPONENT = 0.16;
    const int DEGREE_SYMBOL_NUMBER = 176;

    static void Main()
    {
        // declare and initialize some variables
        string …
Run Code Online (Sandbox Code Playgroud)

c# performance file-io

7
推荐指数
5
解决办法
2415
查看次数

如何衡量Java开发中的性能

是否有任何工具可以测量每个函数调用的执行时间,并找出给定开发java j2se项目的瓶颈?谢谢!

java performance

7
推荐指数
1
解决办法
1952
查看次数

我是否需要编写自己的非托管IL库来使用CLR Profiling API重写IL?

我一直在查看CLR Profiling API的一些文章,其中许多文章都讨论了调用SetILFunctionBody()来进行实际的IL重写; 但是,这些文章中没有一个实际上解释了您可以用来重写实际方法IL字节的确切内容.是否有一个非托管的库可以让我写IL,还是我必须自己写一个?

.net profiling cil rewriting clr-profiling-api

7
推荐指数
1
解决办法
758
查看次数

是否值得用C语言编写部分代码而不是C++作为微优化?

我想知道现代编译器和它们的优化是否仍然值得用C而不是C++编写一些关键代码以使其更快.

我知道C++可能会导致在复制的情况下性能不佳,而它们可以通过引用传递,或者当编译器自动创建类时,通常使用重载的运算符和许多其他类似的情况; 但是对于一个知道如何避免所有这些的优秀C++开发人员来说,仍然值得用C语言编写代码以提高性能吗?

c c++ performance micro-optimization

7
推荐指数
2
解决办法
660
查看次数

从Rprof获取更多信息()

我一直试图深入研究我编写的一些R代码中的时间,所以我正在使用Rprof.但输出还不是很有用:

> summaryRprof()
$by.self
                      self.time self.pct total.time total.pct
"$<-.data.frame"           2.38     23.2       2.38      23.2
"FUN"                      2.04     19.9      10.20      99.6
"[.data.frame"             1.74     17.0       5.54      54.1
"[.factor"                 1.42     13.9       2.90      28.3
...
Run Code Online (Sandbox Code Playgroud)

有没有办法深入挖掘并找出哪些具体的调用$<-.data.frame,FUN(可能来自哪些by())等实际上是罪魁祸首?或者我是否需要重构代码并制作更小的功能块以获得更细粒度的结果?

我拒绝重构的唯一原因是我必须将数据结构传递给函数,并且所有传递都是按值进行的,所以这似乎是错误方向的一步.

谢谢.

profiling r

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

随机完整系统无响应运行数学函数

我有一个程序,一次加载一个文件(从10MB到5GB)一个块(ReadFile),并为每个块执行一组数学运算(基本上计算哈希).

在计算散列之后,它将关于块的信息存储在STL映射中(基本上<chunkID, hash>),然后将块本身写入另一个文件(WriteFile).

就是这样.该程序将导致某些PC窒息死亡.鼠标开始断断续续,任务管理器需要> 2分钟显示,ctrl + alt + del无响应,运行程序很慢......工作.

我已经完成了我能想到的优化程序的所有内容,并对所有对象进行了三重检查.

我做了什么:

  • 尝试了不同的(不太密集的)散列算法.
  • 将所有分配切换到nedmalloc而不是默认的new运算符
  • 从stl :: map切换到unordered_set,发现性能仍然很糟糕,所以我再次切换到Google的dense_hash_map.
  • 转换所有对象以存储指向对象的指针而不是对象本身.
  • 缓存所有读写操作.我没有读取16k的文件块并对其进行数学运算,而是将4MB读入缓冲区并从那里读取16k块.所有写操作都相同 - 它们在写入磁盘之前合并为4MB块.
  • 使用Visual Studio 2010,AMD Code Analyst和perfmon进行大量分析.
  • 将线程优先级设置为THREAD_MODE_BACKGROUND_BEGIN
  • 将线程优先级设置为THREAD_PRIORITY_IDLE
  • 每次循环后添加Sleep(100)调用.

即使在所有这些之后,应用程序仍然会在某些情况下导致系统范围内的某些机器挂起.

Perfmon和Process Explorer显示最小的CPU使用率(使用休眠),没有来自磁盘的持续读/写,几个硬页面故障(在5GB输入文件的应用程序的生命周期中只有~30k页面故障),虚拟内存很少(从不超过150MB),没有泄漏的手柄,没有内存泄漏.

我在运行Windows XP时测试过的机器 - 包括Windows 7,x86和x64版本.没有少于2GB的RAM,尽管在较低的内存条件下问题总是会加剧.

我不知道下一步该做什么.我不知道是什么导致它 - 我在CPU或内存之间被撕裂是罪魁祸首.CPU因为没有睡眠和不同的线程优先级,系统性能会发生显着变化.内存,因为使用unordered_set与Google的dense_hash_map时,问题发生的频率存在巨大差异.

有什么奇怪的?显然,NT内核的设计应该防止这种行为的不断发生(用户模式应用驱动系统,这种极端的表现不佳!?)......但是当我编译和运行代码在OS X或Linux上(它是相当标准的C++),即使在内存较少且CPU较弱的糟糕机器上也能表现出色.

接下来我应该做什么?我怎么知道Windows在杀死系统性能的幕后所做的是什么,当所有指标都是应用程序本身没有做任何极端的事情时?

任何建议都是最受欢迎的.

c++ windows optimization performance kernel

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