相关疑难解决方法(0)

查找字符串中指定字符的所有索引

例如,如果我有"scissors"变量,并想知道所有出现的字母的位置"s",它应该打印出来1, 4, 5, 8

如何以最有效的方式在JavaScript中执行此操作?我不认为循环整体是非常有效的

javascript string indexing

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

在.Net中LINQ和Lambda表达的效率和性能是什么?

我使用.Net 3.5和VS 2008一个多月了.像大多数.Net开发人员一样,我已经从.Net 1.0&2.0和VS 2005的多年经验发展而来.就在最近,我发现了LINQ和Lambda表达式的简单性和强大功能,就像我最近的问题一样,例如在列表中查找项目LINQ,使用Lambda或LINQ 类实例转换或映射到另一个实例的列表,并使用Lambda或LINQ 将类列表转换或映射到另一个类列表.

我承认Lambda和LINQ更简单易读,看起来非常强大.在幕后,.Net编译器必须生成大量代码才能实现这些功能.因此,我对转换到新语法有点犹豫,因为我已经知道了实现相同结果的"旧"方法.

我的问题是关于Lambda和LINQ的效率和性能.也许Lambda表达式大多是内联函数,在这种情况下我猜Lambda应该没问题.LINQ怎么样?

让我们将讨论限制为LINQ-to-Objects LINQ-to-SQL(LINQ-to-SQL).任何评论,比较和经验?

.net c# linq lambda .net-3.5

38
推荐指数
3
解决办法
4万
查看次数

LINQ查询有很多开销吗?

IEnumerable<T>轻量级还是重量级的简单LINQ查询?它们如何与手写forforeach循环比较?何时更喜欢LINQ与手动搜索有一般指导原则?

例如:

var lowNums =
    from n in numbers
    where n < 5
    select n;
Run Code Online (Sandbox Code Playgroud)

相比:

List<int> lowNums = new List<int>();

foreach (int n in numbers)
{
    if (n < 5)
    {
        lowNums.Add(n);
    }
}
Run Code Online (Sandbox Code Playgroud)

我和一位同事谈论LINQ,他对使用它表示了一些犹豫.他猜测为了支持LINQ可以做的一切,可能会在"幕后"进行大量工作.

以上示例之间是否存在显着的性能差异?是否有任何好的资源可以谈论集合上的LINQ性能?一个简单的Google搜索linq表现出现了一些看似过时的文章.

.net linq performance

21
推荐指数
4
解决办法
2812
查看次数

有什么方法可以改进这种字符串切片方法

我写了这个字符串扩展一段时间后,我实际上得到了相当多的使用.

public static string Slice(this string str, int? start = null, int? end = null, int step = 1)
{
    if (step == 0) throw new ArgumentException("Step cannot be zero.", "step");

    if (start == null)
    {
        if (step > 0) start = 0;
        else start = str.Length - 1;
    }
    else if (start < 0)
    {
        if (start < -str.Length) start = 0;
        else start += str.Length;
    }
    else if (start > str.Length) start = str.Length;

    if (end == null) …
Run Code Online (Sandbox Code Playgroud)

c# string slice

9
推荐指数
1
解决办法
1303
查看次数

LINQ比简单循环慢得多吗?

可能重复:
LINQ应该避免因为它很慢吗?

我喜欢LINQ.正如我今天在另一篇文章中读到的那样"这是切片面包以来最好的东西",我完全赞同.但在我工作的公司,其他人似乎都讨厌LINQ.

几个星期前,我第一次使用ReSharper,当我编写ReSharper时突然告诉我,我的foreach-loop可以转换为LINQ表达式.这对我来说就像魔术,我展示了我的同事.令他惊讶的是,他说:"我希望它可以反过来工作并将LINQ变成循环.那会快得多!"

LINQ-to-Objects真的那么慢吗?我试过自己.当我运行以下几次样本时,我会得到350左右的Elapsed Ticks.

        Stopwatch sw = new Stopwatch();

        List<Person> personList = new List<Person>();
        for (int i = 0; i < 5000; i++)
        {
            Person p = new Person() {ID = i};
            personList.Add(p);
        }

        sw.Start();

        Person searchPerson = null;

        foreach (Person person in personList)
        {
            if (person.ID == 4321)
            {
                searchPerson = person;
                break;
            }
        }

        sw.Stop();

        Console.WriteLine(sw.ElapsedTicks);
Run Code Online (Sandbox Code Playgroud)

如果我将循环更改为LINQ-Query(Resharper将为我执行此操作),我将获得大约900的ElapsedTicks.是循环的两倍多.

Person searchPerson = personList.FirstOrDefault(person => person.ID == 4321);
Run Code Online (Sandbox Code Playgroud)

看起来LINQ确实比较慢,如果你经常使用它,这可能是一个问题.在我们公司,我们有很多数据.那么避免LINQ是正确的决定还是我们做错了什么?

linq performance

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

标签 统计

linq ×3

.net ×2

c# ×2

performance ×2

string ×2

.net-3.5 ×1

indexing ×1

javascript ×1

lambda ×1

slice ×1