小编dam*_*boy的帖子

如何获取LZMA2文件的未压缩大小(.xz/liblzma)

我正在寻找一种方法来获取使用xz实用程序压缩的LZMA2/.xz文件的未压缩流大小.

我正在使用Windows/Linux的liblzma来完成这项任务,所以我想我正在寻找liblzma中的一些C/C++ API来实现这个目的.

c size lzma xz

4
推荐指数
1
解决办法
3973
查看次数

如何最小化Protobuf.NET内存消耗

我正在使用Protobuf.NET序列化大量的类,其中大部分是作为引用(因为我有多个引用到我的数据结构中的相同类).

所有序列化类都使用ImplicitFirends.AllFields序列化,以确保所有内容都被转储.

在我目前的测试用例中,我有53个文件,总金额为500MB.

当我使用Protobuf.NET反序列化器读取这些数据时,我的专用字节/驻留内存最多可以射出9GB并且在那里保持不变(即,这不是在反序列化后发布的临时内存/ GC'd).

另一个特殊的事情是,如果我重写(重新序列化)所有数据,它仍然保持相同的大小.

这个x20在内存中爆炸是否有意义?

.net c# protobuf-net

4
推荐指数
1
解决办法
1016
查看次数

如何通过F#中的键将两个地图相交?

我想将具有公共密钥的两个F#地图集成到一个Map中,该Map具有公共密钥和两个值的元组作为其值.

即签名是这样的:

Map<K, T1> -> Map<K, T2> -> Map<K, T1 * T2>
Run Code Online (Sandbox Code Playgroud)

有任何简单实用且高效的方法吗?

我知道我可以将各组键交叉,然后构建一个新的地图,我只想做一些不那么脏的事情......

f# dictionary functional-programming intersect

4
推荐指数
1
解决办法
339
查看次数

使用相同的模型并行(高效)反序列化

我正在尝试使用.NET任务读取使用ProtoBuf.NET序列化的多个文件,如下所示:

public static ResultsDump Amalgamate(RuntimeTypeModel model, IEnumerable<string> files)
{      
  var readDumpTasks = 
    files.Select(fn =>
      Task<ResultsDump>.Factory.StartNew(() => {
        try {
          using (var dumpFile = new FileStream(fn, FileMode.Open))
          {
            var miniDump = (ResultsDump)model.Deserialize(dumpFile, null, typeof(ResultsDump));
            if (miniDump == null) {
              throw new Exception(string.Format("Failed to deserialize dump file {0}", fn));
            }
            //readDumps.Add(miniDump);
            return miniDump;
          }
        }
        catch (Exception e) {
          throw new Exception(string.Format("cannot read dump file {0}: {1}", fn, e.Message), e);
        }
      })).ToArray();

  Task.WaitAll(readDumpTasks);

  var allDumps = readDumpTasks.Select(t => t.Result).ToList();

  // Goes on.. …
Run Code Online (Sandbox Code Playgroud)

.net c# parallel-processing protobuf-net task-parallel-library

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

VirtualMode中的WinForms ListView是否限制为100,000,000行?

我有一些网格场景,我希望在ListView中显示> 500,000,000行.

如果我人为限制我的ListView显示100,000,000:

 _listView.VirtualListSize = _data.Count;
 if (_listView.VirtualListSize > 100000000)
   _listView.VirtualListSize = 100000000;
Run Code Online (Sandbox Code Playgroud)

一切正常(自然在VirtualMode中).当我将我的代码更改为:

 _listView.VirtualListSize = _data.Count;
 if (_listView.VirtualListSize > 100000001)
   _listView.VirtualListSize = 100000001;
Run Code Online (Sandbox Code Playgroud)

ListView显示一个空网格......这是一个Microsoft Bug吗?这是从哪里来的?这是Win32 ListView限制吗?最重要的是,为什么没有记录?

.net listview virtualmode

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