相关疑难解决方法(0)

为什么处理排序数组比处理未排序数组更快?

这是一段看似非常特殊的C++代码.出于某种奇怪的原因,奇迹般地对数据进行排序使得代码几乎快了六倍.

#include <algorithm>
#include <ctime>
#include <iostream>

int main()
{
    // Generate data
    const unsigned arraySize = 32768;
    int data[arraySize];

    for (unsigned c = 0; c < arraySize; ++c)
        data[c] = std::rand() % 256;

    // !!! With this, the next loop runs faster.
    std::sort(data, data + arraySize);

    // Test
    clock_t start = clock();
    long long sum = 0;

    for (unsigned i = 0; i < 100000; ++i)
    {
        // Primary loop
        for (unsigned c = 0; c < arraySize; ++c) …
Run Code Online (Sandbox Code Playgroud)

c++ java optimization performance branch-prediction

2万
推荐指数
27
解决办法
142万
查看次数

调试和发布版本之间的性能差异

我必须承认,通常我没有在程序中调试DebugRelease配置之间进行切换,我通常选择调试配置,即使程序实际部署在客户端也是如此.

据我所知,如果不手动更改这些配置,这些配置之间的唯一区别是DebugDEBUG定义常量,并且Release已检查Optimize代码.

所以我的问题实际上是双重的:

  1. 这两种配置之间是否存在很多性能差异.是否有任何特定类型的代码会在这里造成性能上的巨大差异,或者它实际上并不那么重要?

  2. 是否有任何类型的代码可以在Debug配置下正常运行,可能在Release配置下失败,或者您可以确定在Debug配置下经过测试和正常工作的代码在Release配置下也能正常工作.

.net c# debugging performance configuration

273
推荐指数
7
解决办法
6万
查看次数

C#中的内联函数?

你如何在C#中做"内联函数"?我认为我不理解这个概念.他们喜欢匿名方法吗?像lambda函数?

注意:答案几乎完全处理内联函数的能力,即"用被调用者的主体替换函数调用站点的手动或编译器优化".如果您对匿名(也称为lambda)函数感兴趣,请参阅@ jalf的答案或者每个人都在说什么'Lambda'?.

c# optimization inline

264
推荐指数
7
解决办法
17万
查看次数

C#会内联这些功能吗?

我正在用C#编写一个性能关键型应用程序,核心操作是权重计算.该函数如下所示:

public void ForEachWeight(Action<int, int, float> action)
{
    for (int lower = 0; lower < LowerLayerSize; lower++) {
        for (int upper = 0; upper < UpperLayerSize; upper++) {
            action(lower, upper, Weights[(lower * UpperLayerSize) + upper]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它在几十个地方被调用,具有各种简单的功能,如:

if (activationMethod == ActivationMethod.Binary) {
    ForEachWeight((lower, upper, weight) => upperLayer.Values[upper] += weight;
} else {
    ForEachWeight((lower, upper, weight) => upperLayer.Values[upper] += lowerLayer.Values[lower] * weight);
}
Run Code Online (Sandbox Code Playgroud)

所有调用都在同一个类中完成,因此所有变量都可以访问.C#可以内联这些函数调用吗?我在想,例如上面的调用可以内联到这样的东西:

if (activationMethod == ActivationMethod.Binary) {
    for (int lower = 0; lower < LowerLayerSize; lower++) { …
Run Code Online (Sandbox Code Playgroud)

c# performance lambda inline

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