相关疑难解决方法(0)

在CLR 4.0中,单个对象的大小仍然限制为2 GB?

据我所知,.NET中的单个实例有2 GB的限制.我没有太多关注,因为到目前为止我主要使用32位操作系统.在32但它或多或少是一个人为的限制.但是,我很惊讶地发现这个限制也适用于64位.NET.

由于诸如List<T>使用数组来存储项目之类的集合,这意味着与在64位上运行的相同应用程序相比,在32位上运行的.NET应用程序将能够在列表中保存两倍的引用类型项.这非常令人惊讶.

有谁知道这个限制是否在CLR 4.0中得到解决(目前我手头没有安装4.0).

.net memory clr4.0

39
推荐指数
3
解决办法
2万
查看次数

C#Collection <T>的最大容量在哪里定义?

我试图向Collection中添加大量元素,每个简单数据传输对象的元素具有基本数据类型的五个属性,没什么特别之处.

在循环中添加新条目时,我总是得到一个OutOfMemoryException.有趣的是,在尝试添加8388608th元素(8*1024*1024)时,我总是得到异常.因此,我假设此类集合中允许的容量(元素数量)存在内置限制,但我找不到任何有关它的信息.

这个限制确实存在吗?我会在哪里找到这个记录?

.net collections

11
推荐指数
1
解决办法
3146
查看次数

Collection <T>的最大容量与x86的预期不同

关于集合中可以包含的最大项目数的主要问题,例如List.我在这里寻找答案,但我不理解这个推理.

假设我们正在与一个List<int>具有sizeof(int)= 4个字节......每个人都似乎是确保为64,你可以有一个最大268435456 int和x86的最大134217728 int.链接:

但是,当我自己测试时,我发现x86并非如此.谁能指出我可能出错的地方?

//// Test engine set to `x86` for `default processor architecture`
[TestMethod]
public void TestMemory()
{
    var x = new List<int>();

    try
    {
        for (long y = 0; y < long.MaxValue; y++)
        x.Add(0);
    }
    catch (Exception)
    {
        System.Diagnostics.Debug.WriteLine("Actual capacity (int): " + x.Count);
        System.Diagnostics.Debug.WriteLine("Size of objects: " + System.Runtime.InteropServices.Marshal.SizeOf(x.First().GetType())); //// This gives us "4"
    }
}
Run Code Online (Sandbox Code Playgroud)

对于x64:268435456(预期)

对于x86:67108864(比预期少2倍)

为什么人们说包含134217728的List int …

.net c#

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

为什么 List&lt;T&gt;.Count 是有符号整数?List&lt;T&gt;.Count 可以为负数吗?

public class List<T>\n{\n     public int Count\n        {\n            get;\n        }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我注意到Count是一个int,结果会小于 0\xef\xbc\x9f

\n

如果Count可以小于0,我必须写\xef\xbc\x9a

\n
if(myList.Count < 1)\n{\n  \n}\n
Run Code Online (Sandbox Code Playgroud)\n

否则我可以这样写:

\n
if(myList.Count == 0)\n{\n  \n}\n
Run Code Online (Sandbox Code Playgroud)\n

.net c# list comparison-operators empty-list

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

优化List <string>

我对C#有点新意,我遇到了性能问题.在我的程序中,人们导入一个.txt列表,程序会从中列出一个列表; 问题是它消耗了太多内存,导致PC内存不足而崩溃.我想过使用'yield'而没有成功.有任何想法吗?

private List<string> ImportList()
{
    try
    {
        using (var ofd = new OpenFileDialog() { Filter = "Text files (*.txt) | *.txt" })
        {
            if (ofd.ShowDialog() == DialogResult.OK)
            {
               return File.ReadAllLines(ofd.FileName).ToList();
            }
        }

        return null;
    }
    catch(OutOfMemoryException ex)
    {
        MessageBox.Show("The list is too large. Try using a smaller list or dividing it.", "Warning!");
        return null;

    }
}
Run Code Online (Sandbox Code Playgroud)

c# arrays list

0
推荐指数
1
解决办法
162
查看次数