相关疑难解决方法(0)

动态变量如何影响性能?

我对dynamicC#的性能有疑问.我读过dynamic让编译器再次运行,但是它做了什么?

是否必须dynamic使用用作参数的变量或仅具有动态行为/上下文的行重新编译整个方法?

我注意到使用dynamic变量可以将简单的for循环减慢2个数量级.

我玩过的代码:

internal class Sum2
{
    public int intSum;
}

internal class Sum
{
    public dynamic DynSum;
    public int intSum;
}

class Program
{
    private const int ITERATIONS = 1000000;

    static void Main(string[] args)
    {
        var stopwatch = new Stopwatch();
        dynamic param = new Object();
        DynamicSum(stopwatch);
        SumInt(stopwatch);
        SumInt(stopwatch, param);
        Sum(stopwatch);

        DynamicSum(stopwatch);
        SumInt(stopwatch);
        SumInt(stopwatch, param);
        Sum(stopwatch);

        Console.ReadKey();
    }

    private static void Sum(Stopwatch stopwatch)
    {
        var sum = 0;
        stopwatch.Reset();
        stopwatch.Start();
        for …
Run Code Online (Sandbox Code Playgroud)

c# performance dynamic

119
推荐指数
2
解决办法
4万
查看次数

通用列表或不同类型的字典

我想要一个将字符串映射到不同类型的通用列表的Dictionary.即以下列形式:

Key        Value
string     List<T>
string     List<U>
string     List<V>
string     List<U>
...

目前我正在使用a Dictionary<string, IList>然后从每个字典KeyValuePair<string, IList> pair条目中提取强类型列表,如下所示:

Type layerType = pair.Value.GetType().GetGenericArguments()[0];
List<layerType> objectsClicked = pair.Value as List<layerType>;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

[编辑]正如已经注意到的,上面的内容没有编译,道歉 - 这就是当你在做某些事情的时候提出问题时所得到的.更多解释.我正在制作一个基本的空间数据查看器.最终视图由一组Layer<T>s组成.每个图层都提供一个委托来呈现其类型(给定偏移量和比例)以及检查其对象在当前窗口中的方式.对于命中测试,我希望每个图层的列表都被击中了对象.这份名单将是List<Point>一个Point层,等等......从所有命中的分组Layer<T>s就那么是强类型列表的集合.

c#

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

C#4.0动态Office互操作性能

我采用了在Visual Studio 2008中开发的应用程序,并通过COM Interop使用了各种Office库.我使用动态关键字和Visual Studio 2010开始了一些概念开发的证明.我发现执行相同的任务使用动态比使用"旧"方式慢大约5-10倍.有没有其他人经历过这种性能下降?这是已知还是我应该找到报告方式?

dynamic visual-studio-2010 office-interop

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

DLR的内存占用量是多少?

我正在考虑限制使用C#的dynamic关键字.我的初始时间试验令人惊讶 - 100,000次迭代的性能下降不到一秒(可能是由于DLR缓存).

但是,我无法访问内存分析器,Eric Lippert写道:

然后它启动DLR [...] DLR然后启动一个特殊版本的C#编译器......

这是什么内存占用,并在动态代码被垃圾收集时卸载?

c# memory dynamic-language-runtime dynamic c#-4.0

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