我注意到迭代了一个原始集合(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) 我正在尝试加载一个非常大的图像(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的尺寸感到烦恼.:)
感谢您的时间.