小编Mal*_*ako的帖子

在x86上处理非常大的列表

我需要使用大型浮动列表,但我在x86系统上遇到了内存限制.我不知道最终长度,所以我需要使用可扩展类型.在x64系统上,我可以使用<gcAllowVeryLargeObjects>.

我目前的数据类型:

List<RawData> param1 = new List<RawData>();
List<RawData> param2 = new List<RawData>();
List<RawData> param3 = new List<RawData>();

public class RawData
{
    public string name;
    public List<float> data;
}
Run Code Online (Sandbox Code Playgroud)

paramN列表的长度很低(目前为50或更低),但数据可以是10m +.当长度为50时,我OutOfMemoryException在1m以上的数据点处达到内存限制(),当长度为25时,我在2m以上的数据点达到极限.(如果我的计算是正确的,那就是200MB,加上名称的大小加上开销).我可以用什么来增加这个限制?

编辑:我尝试使用List<List<float>>最大内部列表大小1 << 17(131072),这有点增加了限制,但仍然没有我想要的.

Edit2:我尝试将List>中的块大小减少到8192,并且我得到了大约2.3m元素的OOM,任务管理器读取了大约1.4GB的进程.看起来我需要减少数据源和存储之间的内存使用,或者更频繁地触发GC - 我能够在具有4GB RAM的PC上的x64进程中收集10m数据点,IIRC进程从未超过3GB

Edit3:我将代码缩减为处理数据的部分.http://pastebin.com/maYckk84

编辑4:我看过DotMemory,发现我的数据结构确实占用了我正在测试的设置~1GB(50ch*3 params*2m events = 300,000,000 float elements).我想我需要在x86上限制它,或者在获取数据时弄清楚如何以这种格式写入磁盘

.net c# winforms

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

过程入口点无法位于动态链接库中 - 查找错误的DLL

在构建特定配置时,我的程序似乎在查找错误的DLL中的特定函数.这些函数在不同的DLL中定义,并在代码的完全独立的部分中使用,并且错误总是引用相同的DLL(libvlc.dll).如果我使用libvlc.dll构建不同的配置或禁用任何东西,一切正常.所有内容都是在没有错误或警告的情况下构建的,但是在使用Debug - > Step Into时,程序将在第一行被击中之前崩溃

The procedure entry point ReportFault could not be located in the dynamic link library libvlc.dll
The procedure entry point curl_easy_setopt could not be located in the dynamic link library libvlc.dll
The procedure entry point ogg_stream_packetin could not be located in the dynamic link library libvlc.dll
Run Code Online (Sandbox Code Playgroud)

c++ dll

3
推荐指数
1
解决办法
9226
查看次数

标签 统计

.net ×1

c# ×1

c++ ×1

dll ×1

winforms ×1