相关疑难解决方法(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万
查看次数

TargetedPatchingOptOut:"对整个NGen图像边界内联的性能至关重要"?

使用反射器经历了一些框架类,并注意到许多方法和属性具有以下属性

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
Run Code Online (Sandbox Code Playgroud)

我很确定我在其他地方也看到了上述评论,从未跟进过.

有人可以告诉我这在C#和其他任何背景下意味着什么?

.net c# compiler-construction ngen

140
推荐指数
1
解决办法
1万
查看次数

Array.Copy与Buffer.BlockCopy

Array.CopyBuffer.BlockCopy都做同样的事情,但是BlockCopy针对快速字节级原始数组复制,而是Copy通用实现.我的问题是 - 在什么情况下你应该使用BlockCopy?您是否应该在复制基本类型数组时随时使用它,或者只有在编写性能时才使用它?使用Buffer.BlockCopy结束有什么固有的危险Array.Copy吗?

.net arrays

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

跨组件的本机映像的内联方法

正如在另一个问题中所解释的,如果方法设置了TargetedPatchingOptOutAttribute,则通常只允许Ngen跨组件内联方法.

但是,通过使用DependencyAttribute,对于硬绑定程序集也是如此吗?LoadHint.Always

编辑:也许我的初始问题的答案是否定的,否则TargetedPatchingOptOutAttribute在mscorlib中使用它是没有意义的,因为这个程序集总是硬绑定(它设置了DefaultDependencyAttribute).所以我想重新解释一下我的问题:是否可以在TargetedPatchingOptOutAttribute组件的原生图像中内联方法?

.net ngen .net-assembly

18
推荐指数
1
解决办法
3318
查看次数

是否收集了MakeGenericType /泛型类型的垃圾?

在.NET中众所周知,类型不是垃圾收集,这意味着如果你正在玩f.ex. Reflection.Emit,你必须要小心卸载AppDomains等等......至少我是如何理解事情是如何运作的.

这让我想知道泛型类型是否是垃圾收集的,更准确一点:用MakeGenericType例如基于用户输入创建的泛型.:-)

所以我构建了以下测试用例:

public interface IRecursiveClass
{
    int Calculate();
}

public class RecursiveClass1<T> : IRecursiveClass 
                                  where T : IRecursiveClass,new()
{
    public int Calculate()
    {
        return new T().Calculate() + 1;
    }
}
public class RecursiveClass2<T> : IRecursiveClass
                                  where T : IRecursiveClass,new()
{
    public int Calculate()
    {
        return new T().Calculate() + 2;
    }
}

public class TailClass : IRecursiveClass
{
    public int Calculate()
    {
        return 0;
    }
}

class RecursiveGenericsTest
{
    public static int CalculateFromUserInput(string str)
    { …
Run Code Online (Sandbox Code Playgroud)

.net c# generics garbage-collection types

11
推荐指数
1
解决办法
2352
查看次数

Func <T>的性能和继承

Func<...>在使用继承和泛型时,我一直无法理解在整个代码中使用的性能特征- 这是我发现自己一直使用的组合.

让我从一个最小的测试用例开始,这样我们都知道我们在谈论什么,然后我会发布结果,然后我将解释我期望的内容以及为什么......

最小的测试用例

public class GenericsTest2 : GenericsTest<int> 
{
    static void Main(string[] args)
    {
        GenericsTest2 at = new GenericsTest2();

        at.test(at.func);
        at.test(at.Check);
        at.test(at.func2);
        at.test(at.Check2);
        at.test((a) => a.Equals(default(int)));
        Console.ReadLine();
    }

    public GenericsTest2()
    {
        func = func2 = (a) => Check(a);
    }

    protected Func<int, bool> func2;

    public bool Check2(int value)
    {
        return value.Equals(default(int));
    }

    public void test(Func<int, bool> func)
    {
        using (Stopwatch sw = new Stopwatch((ts) => { Console.WriteLine("Took {0:0.00}s", ts.TotalSeconds); }))
        {
            for (int i = 0; i < 100000000; …
Run Code Online (Sandbox Code Playgroud)

.net c# generics performance inheritance

10
推荐指数
1
解决办法
3444
查看次数