相关疑难解决方法(0)

Action/Func vs Methods,有什么意义?

我知道如何使用ActionFunc在.NET中,但每次我开始,使用我调用的常规旧方法可以实现完全相同的解决方案.

这排除了当一个Action或者Func被用作我无法控制的东西的参数时,比如LINQ .Where.

基本上我的问题是......为什么这些存在?他们给了我什么额外的和新的一个简单的方法不?

.net c# action function func

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

DataTable.Select vs DataTable.rows.Find vs foreach vs Find(Predicate <T>)/ Lambda

我有一个缓存在内存中的DataTable /集合,我想用它作为源来生成自动完成文本框的结果(当然使用AJAX).我正在评估各种选项以快速获取数据.数据表中集合/行中的项目数可以从10000到2,000,000不等.(因此,我们不会转移,暂时假设已做出决定,我有足够的RAM,我将使用缓存而不是数据库查询)

我有一些额外的业务逻辑用于此处理; 我必须priority根据集合中的列(int)确定自动完成列表的优先级.因此,如果我有人搜索Micro并且我会说出20个以单词/句子开头的结果,Micro那么我会选择具有最高优先级的前10个结果项.(因此需要具有与字符串值相关联的优先级属性).

集合项已按字母顺序排序.

在这种情况下,什么是最好的解决方案.
1.使用DataTable.Select(
2. 使用DataTable.Rows.Find( .
3.使用自定义集合与的foreach或通过其值进行迭代.
4.使用泛型集合与匿名委托或lambda(因为两者给予同样的性能?)

.net optimization lambda anonymous-methods

19
推荐指数
2
解决办法
5万
查看次数

lambda函数比委托/匿名函数更快吗?

我假设lambda functions,delegates并且anonymous functions使用相同的主体将具有相同的"速度",但是,运行以下简单程序:

static void Main(string[] args)
{
    List<int> items = new List<int>();

    Random random = new Random();

    for (int i = 0; i < 10000000; i++)
    {
        items.Add(random.Next());
    }

    Stopwatch watch;
    IEnumerable<int> result;

    Func<int, bool> @delegate = delegate(int i)
    {
        return i < 500;
    };
    watch = Stopwatch.StartNew();
    result = items.Where(@delegate);
    watch.Stop();
    Console.WriteLine("Delegate: {0}", watch.Elapsed.TotalMilliseconds);

    Func<int, bool> lambda = i => i < 500;
    watch = Stopwatch.StartNew();
    result = items.Where(lambda);
    watch.Stop();
    Console.WriteLine("Lambda: {0}", …
Run Code Online (Sandbox Code Playgroud)

c# lambda delegates anonymous-function

11
推荐指数
2
解决办法
9878
查看次数

Lambda表达式比foreach语句慢?

我做了一个小实验来测试lamdba表达式是否可以检索比foreach语句更快的结果.但是,Lambda失败了

System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch();
        st.Start();
        List<int> lst = new List<int>();
        foreach (GridViewRow item in GridView1.Rows)
        {
            if (((CheckBox)item.FindControl("Check")).Checked)
            {
                lst.Add(Convert.ToInt32(((Label)item.FindControl("Id")).Text));
            }
        }
        st.Stop();
        Response.Write(st.Elapsed.ToString());
        Response.Write("<br/><br/><br/>");
        st.Reset();
        st.Start();
        List<int> lstRank = GridView1.Rows.OfType<GridViewRow>().Where(s => ((CheckBox)s.FindControl("Check")).Checked)
                                                                     .Select(s => Convert.ToInt32(((Label)s.FindControl("Id")).Text)).ToList();
        st.Stop();
        Response.Write(st.Elapsed.ToString());
        int i = 0;


output
00:00:00.0000249


00:00:00.0002464 
Run Code Online (Sandbox Code Playgroud)

为什么lambda比foreach慢.这可能是lambda表达式的缺点

linq asp.net

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

LINQ在简单操作中的效率

我最近发现了LINQ,我发现它非常有趣.目前我有以下功能,我不确定它是否会更高效,毕竟产生相同的输出.

你能告诉我你对此的看法吗?

该函数只是以一种非常简单的方式删除标点符号:

private static byte[] FilterText(byte[] arr)
    {
        List<byte> filteredBytes = new List<byte>();
        int j = 0; //index for filteredArray

        for (int i = 0; i < arr.Length; i++)
        {
            if ((arr[i] >= 65 && arr[i] <= 90) || (arr[i] >= 97 && arr[i] <= 122) || arr[i] == 10 || arr[i] == 13 || arr[i] == 32)
            {
                filteredBytes.Insert(j, arr[i]) ;
                j++;
            }
        }

        //return the filtered content of the buffer
        return filteredBytes.ToArray();
    }
Run Code Online (Sandbox Code Playgroud)

LINQ替代方案:

    private static byte …
Run Code Online (Sandbox Code Playgroud)

c# linq performance

4
推荐指数
1
解决办法
318
查看次数