c#实例化多个对象

c#实例化多个对象,c#,.net,arrays,C#,.net,Arrays,因此,我想实例化一个对象块以获得一些速度,而不是使用新关键字创建每个项目。Eg.在C++中使用下面的代码: ListViewItem[] items = new ListViewItem[1000]; 但我不知道如何在c#中做到这一点。如果我执行上面的代码,我只会得到1000个指针。(我猜,因为它们是空的) 我的目标是避免打1000次新电话 编辑: 在C++中编写了一个测试程序,试图显示在C语言中我想实现的内容。 #包括“stdafx.h” #包括 #包括 #包括 #包括 使用名称空间std;

因此,我想实例化一个对象块以获得一些速度,而不是使用新关键字创建每个项目。Eg.在C++中使用下面的代码:

ListViewItem[] items = new ListViewItem[1000];
但我不知道如何在c#中做到这一点。如果我执行上面的代码,我只会得到1000个指针。(我猜,因为它们是空的)

我的目标是避免打1000次新电话

编辑: 在C++中编写了一个测试程序,试图显示在C语言中我想实现的内容。
#包括“stdafx.h”
#包括
#包括
#包括
#包括
使用名称空间std;
甲级
{
公众:
()
{
m_pVector=NULL;
}
void setVector(vector*pVector)
{
m_pVector=pVector;
}
void deleteVector()
{
向量*temp=m_pVector;
m_pVector=NULL;
删除临时文件;
}
私人:
向量*m_pVector;
};
int _tmain(int argc,_TCHAR*argv[]
{
整数大小=100000;
A*A1s=新的A[尺寸]();
A*A2s=新的A[尺寸]();
long int start1=0;
长int diff1=0;
long int start2=0;
长int diff2=0;
向量*mVectors=NULL;
对于(int c1=0;c10)
{
向量*temp1=多向量向量;
mVectors=NULL;
删除[]temp1;

对于(int i=0;i<p>)实际上在这个C++代码中:

ListViewItem[] items = new ListViewItem[1000];
对象构造函数(初始化)将被调用
1000次。
就是这样,有一个隐藏的循环

唯一的优点是内存分配只执行一次

  • 1分配
  • n初始化
C#中没有等效的东西。分配和初始化一起完成,一次一个对象,在调用
new
时完成

你的目标是:

  • 1分配
  • 1初始化
  • 重复一遍
因此,要实现它,这是实现它的标准方法:

var items = new ListViewItem[1000];
for (var i = 0; i < items.Length; i++)
{
    items[i] = new ListViewItem();
}

为什么要创建1000个指针?这似乎毫无意义。我想说。我认为,除非您的对象init受到某种与之相关的剧烈性能影响(例如查询数据库),否则您很难发现使用这种方法可以提高C#的性能,即使这样,您也必须在某个时候处理成本问题。我怀疑编译器无论如何都会为您进行大量优化。如果有这样的事情,它仍然需要调用构造函数,
new
就是这么做的……您试图解决什么问题?引用在c#中使用,而不是指针。那么为什么要这样做呢你不只是在一个循环中创建1000个吗?这更快了,因为我创建了一块数据,并且没有在每个循环迭代中调用新的。我从来没有说过用更少的代码会更快,你能解释一下你的观点吗?它们没有什么意义。好吧。这很糟糕。谢谢你的回答!)
var items = new ListViewItem[1000];
for (var i = 0; i < items.Length; i++)
{
    items[i] = new ListViewItem();
}
var array = new object[1000];
Enumerable.Range(0, array.Length).Select(i => array[i] = new object());