English 中文(简体)
C#中测距甚高频大阵列的建议型号
原标题:Recommended type for a VERY large array(memory wise) in C#

我有一大批物体,其中约有20克物体。 每一物体在一大复杂的树木结构中都有儿童物体,在那里也有阵列。 现在使用简单的<密码>myObjectType[] 我的Array

是否有更好的类型,或者我应当如何管理阵列? 99%的阵列使用都在阅读之中,但目前需要近3分钟才能填满。

EDIT:增加更多的信息。

目前的评估将所有这些数据输入巨型阵列,然后将阵列作为数据基。 然后,根据你从一些下降的箱子中选取的数据,对数据进行过滤,然后将一个子块退回到一个数据网显示。 我没有选择改写整个东西,只是把过滤器送到实际的过滤器。

EDIT:更多的信息、对拖延的担忧被拖入了一次会议。

[Serializable]
public class PartsList : System.Collections.CollectionBase
{
  public virtual Part[] parts {get { return (Part[])List; } }
  public new virtual int Count { get{ return this.List.Count;}}

  public virtual CountryList GetCountries()
  {
    CountryList countries = new CountryList;
    //Code removed - goes through every sub item and makes a list of unique countries... 
    // Yes, could have been done better. 
    Return countries;
  }

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

[Serializable]
public class Part
{
  private int id, blah, myvariable;
  private CountryList countries;  //formatted the same way as this class...
  private YearList  years; 
  private ModelList models;
  private PriceHistoryList priceHistoryList;
  // there are a couple more like these...
}

This is why it takes 3minutes to load. - 20k parts - 1-2 countries per part - 1-10 years per part - 1-12 models per part - 1-10 price history per part

When I stop the debugger on this line: PartsList mylist = new PartsList; //populate the list here if (list.Count != 0 ) <- the debugger takes 13 seconds to get off this line after hitting f10. doing a "quick watch" on list just gives me an error for the counts value.

我真心想的是,如果把阵列放在内部,则有更好的变式,以取代阵列......

UPDATE Jan 29 2010 Did some searching and it appears that due to the object designs, it is lazy loading one object at a time into memory, causing a TON of sql calls to be fired. Also the Count seems to take so long because a combo of using CollectionBase and complex objects where it is retrieving each object, counting it then going to the next. Plan now IS to move app to 2008 (.net 3.5 from 1.1) and do a rewrite of the back end of the application so that it does not pre-load 350mb into memory...

感谢大家的投入。

最佳回答

20 000件物体(如事实上的参考文献)是花.。 这笔钱将立即收回。 如果你遇到麻烦,这并不是因为阵列而出现的。

最终使用哪一种收集方法取决于你想要做些什么。

在优化之前,总是确保找到瓶颈。 这往往不是人们所期望的,因此,你应绝对利用一个形象来了解实际上占用这么多时间的情况。

问题回答

阵列类型T[] in any 。 该网络管理的应用程序将阵列的长度作为物体开始附近的变量加以储存。 计算成本需要三倍的时间,因此,我们需要更多关于整个结构的信息(特别是你“计数”的含义),以告诉你需要这么长时间。

一项建议是将“十岁以下儿童物品总数”作为节点的一部分。 这就需要O(log n)时间来维持,这与影响计数的树木操作同样复杂,因此不会影响贵方结构的算法复杂性(尽管每升点每升4英特变量)。

只有一个原因可能如此缓慢。 它是一个老问题,称为rash。 在贵方案运行期间,对你的硬盘灯保持观察。 这是否令人厌恶? 采购更多的援助团。

这当然取决于你们的使用。 我最近优化了一些代码,从装载时间2-3分钟到1秒。 也许可以从我的博客中获取一些想法:http://blog.zoolutions.se/post/204/An-even-better-way-of-a-singleton-URWul-FLin-aspnet.aspx>。

这主要是因为我摆脱了卑鄙的单一州案例,并利用IoC集装箱去做。

这个问题不可能给你具体答案,因为你在法典中很可能发生更多的事情:你think不相干,但可能是造成事情似乎缓慢运行的重要原因。

我说的是“似乎”的,因为我们没有迹象表明,你试图执行could的行动速度更快。

你们需要做的是向你们的方案说明,看看和看看大部分时间的使用情况。 只有到那时,你才能开始研究加快方案的具体途径。

请注意,随机裁员可能会给你带来业绩收益,但如果你发现可能比你的具体技能更盲目的正确点(我不说你没有适当的技能,但甚至业绩专家也会说,在他们大部分时间里,他们会错过。

可能有一些具体问题需要你根据你的问题来审视,但在研究、也许确定这些问题之后,你仍然需要这种介绍。

  • Why does a simple "count" on an array take 3 minutes? Perhaps you left out that you re really counting objects which fit specific criteria? Or perhaps you re using .Count() extension method instead of .Length (note, .Length will return the size of the array, not how many elements you ve actually put objects into)

简介:





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签