Tag: 数组

大arrays和LOH碎片。 什么是公认的惯例?

关于一些可能涉及LOH碎片的可能还有其他未知因素的无望记忆问题,我在这里还有另一个活跃的问题。 我现在的问题是,接受的做事方式是什么? 如果我的应用程序需要在Visual C#中完成,并且需要处理大型数组到int [4000000]的调整,我怎么能不注意垃圾收集器拒绝处理LOH? 似乎我被迫将任何大型数组全局化,并且从不在它们周围使用“new”这个词。 所以,我留下了带有“maxindex”变量的不合适的全局数组,而不是由函数传递的整齐大小的数组。 我总是被告知这是不好的做法。 还有什么选择? System.GC.CollectLOH(“Seriously”)是否有某种function? 是否有可能将垃圾收集外包给System.GC以外的其他方式? 无论如何,处理大型(> 85Kb)变量的普遍接受的规则是什么?

如何在C#中实现Array.Copy?

我试着用ILSpy Array.Copy C#中的Array.Copy的实现,但它没有向我展示实现本身。 我写了一个简单的基准测试,Array.Copy和一个简单的for循环来复制数据。 Array.Copy更快。 如何更快地实施? 谢谢,谢伊

我应该关注.NET字典的速度吗?

我将创建一个将使用字典查找和插入相当多的项目。 这是值得关注的吗? 此外,如果我进行基准测试等并且它真的很糟糕,那么用其他东西替换字典的最佳方法是什么? 使用带有“哈希”键的数组会更快吗? 那会对插入时间有所帮助吗? 此外,我不认为我是微优化的,因为这确实是生产服务器上代码的重要组成部分,因此如果需要额外的100毫秒才能完成,那么我们将寻找新的方法来处理这个问题。

以LINQ方式初始化Jagged数组

我有一个二维锯齿状数组(虽然它总是矩形),我使用传统的循环初始化: var myArr = new double[rowCount][]; for (int i = 0; i < rowCount; i++) { myArr[i] = new double[colCount]; } 我想也许一些LINQ函数会在一个语句中给我一个优雅的方法来做到这一点。 但是,我能想出的最接近的是: double[][] myArr = Enumerable.Repeat(new double[colCount], rowCount).ToArray(); 问题是它似乎正在创建一个double[colCount]并为每行分配一个新数组的intsead分配引用。 有没有办法做到这一点,而不是太神秘?

将C ++数组返回给C#

我似乎无法弄清楚如何将数组从导出的C ++ DLL返回到我的C#程序。 我从google搜索中发现的唯一一件事就是使用Marshal.Copy()将数组复制到缓冲区中,但这并没有给我我想要返回的值,我不知道它给了我什么。 这是我一直在尝试的: 导出function: extern “C” __declspec(dllexport) int* Test() { int arr[] = {1,2,3,4,5}; return arr; } C#部分: [DllImport(“Dump.dll”)] public extern static int[] test(); static void Main(string[] args) { Console.WriteLine(test()[0]); Console.ReadKey(); } 我知道返回类型int []可能是错误的,因为托管/非托管差异,我只是不知道从哪里开始。 除了将字符数组返回到字符串而不是整数数组之外,我似乎无法找到答案。 我想到我使用Marshal.Copy获得的值不是我返回的值的原因是因为导出函数中的’arr’数组被删除但是我不是100%肯定,如果有人能清除它的话那太好了。

分割数组的最佳方法

下午,我需要找出将arrays拆分成较小“块”的最佳方法。 我正在传递大约1200个项目,并且需要将这些项目拆分为更容易处理的100个组,然后我需要将它们传递给处理。 有人可以提出一些建议吗?

为什么将HashTable的长度设置为素数是一个好习惯?

当我点击这段时,我正在阅读Eric Lippert 关于GetHashCode指南和规则的最新博客post: 我们在这里可能更聪明; 就像List在它满了时resize一样,bucket set也可以自己resize,以确保平均bucket长度保持低位。 此外,由于技术原因,通常最好将存储桶设置长度设为素数,而不是100.我们可以对此哈希表进行大量改进。 但是这个哈希表的简单实现的快速草图现在可以做到。 我想保持简单。 所以看起来我错过了一些东西。 为什么将它设置为素数是一个好习惯?

如何以及何时放弃在C#中使用数组?

我总是被告知,向数组添加元素的方式如下: 创建数组+ 1element的空副本,然后将原始数组中的数据复制到其中,然后加载新元素的新数据 如果这是真的,那么由于内存和CPU利用率的原因,在需要大量元素活动的场景中使用数组是正确的,对吗? 如果是这种情况,你是否应该尽量避免在添加大量元素时尽可能多地使用数组? 你应该使用iStringMap吗? 如果是这样,如果您需要两个以上的维度并且需要添加大量元素添加,会发生什么。 你是刚刚受到性能打击还是应该使用其他东西?

从字符串数组中替换字符串的所有出现

我有一个像以下字符串数组: string [] items = {“one”,”two”,”three”,”one”,”two”,”one”}; 我想立刻用零替换所有的。 那么项目应该是: {“zero”,”two”,”three”,”zero”,”two”,”zero”}; 我找到了一个解决方案如何替换字符串数组中的项? 。 但它只会取代第一次出现。 替换所有事件的最佳方法/方法是哪种?

如何从C#中的字节数组中删除和添加字节

我有一个配置文件(.cfg),我用它来创建一个命令行应用程序来将用户添加到SFTP服务器应用程序。 cfg文件需要为cfg文件中的每个条目提供一定数量的保留字节。 我目前只是通过创建一个字节数组并将其转换为字符串,然后将其复制到文件,将新用户附加到文件的末尾,但我遇到了麻烦。 配置文件在文件末尾需要4个字节。 我需要完成的过程是从文件中删除这些尾随字节,附加新用户,然后将字节追加到末尾。 所以,现在你的问题背后有一些背景。 这是一个问题: 如何从字节数组中删除和添加字节? 这是我到目前为止的代码,它从一个文件读取用户并将其附加到另一个文件。 static void Main(string[] args) { System.Text.ASCIIEncoding code = new System.Text.ASCIIEncoding(); //Encoding in ascii to pick up mad characters StreamReader reader = new StreamReader(“one_user.cfg”, code, false, 1072); string input = “”; input = reader.ReadToEnd(); //convert input string to bytes byte[] byteArray = Encoding.ASCII.GetBytes(input); MemoryStream stream = new […]