小编Gen*_*ade的帖子

Iterating T []的开销转换为IList <T>

我注意到迭代了一个原始集合(T [])的性能损失,该集合已被强制转换为通用接口集合(IList或IEnumberable).

例如:

    private static int Sum(int[] array)
    {
        int sum = 0;

        foreach (int i in array)
            sum += i;

        return sum;
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码执行速度明显快于下面的代码,其中参数更改为类型IList(或IEnumerable):

    private static int Sum(IList<int> array)
    {
        int sum = 0;

        foreach (int i in array)
            sum += i;

        return sum;
    }
Run Code Online (Sandbox Code Playgroud)

如果传递的对象是原始数组,并且如果我尝试将循环更改为for循环而不是foreach循环,则仍会出现性能损失.

我可以通过编码来解决性能问题:

    private static int Sum(IList<int> array)
    {
        int sum = 0;

        if( array is int[] )
            foreach (int i in (int[])array)
                sum += i;
        else
            foreach (int i in array)
                sum += i; …
Run Code Online (Sandbox Code Playgroud)

c# generics collections performance

13
推荐指数
1
解决办法
592
查看次数

OutofMemoryException - 加载超大图像

我正在尝试加载一个非常大的图像(14473x25684),但我遇到了内存限制.

这是一个演示问题的简单程序:

static void Main(string[] args)
{
    string largeimage = @"C:\Temp\test_image.jpg"; // 14473x25684

    Image i = Bitmap.FromFile(largeimage); // OutofMemoryException was unhandled
}
Run Code Online (Sandbox Code Playgroud)

现在我明白这个问题与我拥有多少物理内存无关,而是一个寻址限制.有什么办法可以解决这个限制吗?

图像确实有效,它在Photoshop(VM大小:916MB)和ACDSee中打开很好.此外,不要因为列出的尺寸不准确而对Google的尺寸感到烦恼.:)

感谢您的时间.

c# out-of-memory large-files

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