我之前发布了一个关于Protobuf-Net的相关但仍然不同的问题,所以这里是:
我想知道是否有人(特别是Marc)可以评论下列哪一项最有可能更快:
(a)我目前将序列化的内置数据类型存储在二进制文件中.具体来说,长(8字节)和2浮点(2x4字节).其中每3个后来组成一个反序列化状态的对象.long类型表示DateTimeTicks以进行查找.我使用二进制搜索来查找数据请求的开始和结束位置.然后,一种方法在一个块(从开始到结束位置)下载数据,知道每个块由许多上述三元组(1个长整数,1个浮点数,1个浮点数)组成,并且每个三元组总是16个字节长.因此,检索到的三元组数总是(endLocation - startLocation)/ 16.然后我迭代检索到的字节数组,反序列化(使用BitConverter)每个内置类型,然后实例化一个由三元组构成的新对象,并将对象存储在列表中以供进一步处理.
(b)做以下事情会更快吗?构建一个单独的文件(或实现一个头),作为查找目的的索引.然后我不会存储内置类型的单个二进制版本,而是使用Protbuf-net来序列化上述对象的列表(= int的三元组,浮点数,浮点数作为对象的源).每个List都包含确切且总是一天的数据(记住,long表示DateTimeTick).显然,每个List的大小都会有所不同,因此我想为索引查找生成另一个文件或标题,因为每个数据读取请求只会请求整天的多天.当我想要检索一天的序列化列表时,我会简单地查找索引,读取字节数组,使用Protobuf-Net反序列化并且已经拥有我的对象列表.我想为什么我要问的是因为我不完全理解protobuf-net中的集合的反序列化是如何工作的.
为了更好地了解数据的大小,每个二进制文件大约3GB,因此包含数百万个序列化对象.每个文件包含大约1000天的数据.每个数据请求可以请求任意数量的当天数据.
您认为原始处理时间更快?我想在可能编写大量代码来实现之前获取一些输入(b),我目前有(a)并且能够在我的机器上每秒处理大约150万个对象(进程=从数据请求到返回的反序列化列表对象).
简介:我问的是二进制数据是否可以更快地读取I/O并使用方法(a)或(b)进行反序列化.
如何使以下代码有效?它抛出一个错误,说有两个相同名称的元数据属性,但我不明白为什么.
错误消息如下:
System.ComponentModel.Composition.dll中发生未处理的"System.InvalidOperationException"类型异常
附加信息:成员或类型'ConsoleApplication2.DoSomeMagic'包含多个名为'PluginName'的元数据条目.元数据条目可以来自ExportMetadataAttribute,也可以来自自定义元数据属性的属性.删除重复的条目或启用名称为"PluginName"的元数据条目,以允许通过自定义元数据属性上的ExportMetadataAttribute或AttributeUsage.AllowMultiple上的IsMultiple属性进行多个条目.
class Program
{
static void Main(string[] args)
{
var program = new Program();
program.Test();
}
private void Test()
{
//Export
var catalog = new AssemblyCatalog(this.GetType().Assembly);
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
//Import Meta Data
var import1 = container.GetExports<IMagic1, IPluginAttributeView>().Select(e => new PluginAttribute(e.Metadata));
}
}
public interface IPluginAttributeView
{
string PluginName { get; set; }
string PluginConfigurationName { get; set; }
string PluginCategory { get; set; }
Type PluginType { get; set; }
}
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
foreach (var bar in dataFromDataFeed.Where(bar => bar.Key < fromTicks
|| bar.Key > toTicks))
{
dataFromDataFeed.Remove(bar.Key);
}
Run Code Online (Sandbox Code Playgroud)
这是安全还是我需要将IEnumerable转换foreach为Dictionary<T,U>第一个?
谢谢.
我尝试将类对象 StrategySubscription 中的 List 属性 SubscribedSymbols 作为 List 的一部分绑定到 Devexpress GridControl 中特定列的每个单元格中的组合框,但无法使数据绑定正常工作。
自动列生成器工作并将值填充到网格上。所以,我确信数据存在。
我附上了 xaml 代码和数据对象以及当前输出的屏幕截图。
您能帮助使数据绑定正常工作吗?我希望将 SubscribedSymbols 中的字符串集合填充到模板化列中每个单元格的组合框中。
PS:前 3 个网格列和关联单元格绑定得很好,唯一的问题在于将数据绑定到最后一列每个单元格中的组合框。
public class StrategySubscription
{
public Guid StrategyId { get; set; }
public string StrategyName { get; set; }
public int CapitalAllocation { get; set; }
public List<string> SubscribedSymbols { get; set; }
public StrategySubscription(string strategyName, Guid strategyId, int capitalAllocation, List<SymbolSubscription> symbolSubscriptions)
{
StrategyName = strategyName;
StrategyId = strategyId;
CapitalAllocation = capitalAllocation;
SubscribedSymbols = symbolSubscriptions.Select(x => x.Symbol.SymbolId).ToList();
//SubscribedSymbols = …Run Code Online (Sandbox Code Playgroud) 我想知道为什么不需要构造函数将json字符串反序列化为.Net / C#类对象实例。令我惊讶的是,根本没有调用构造函数并将其删除,并且反序列化器仍从json字符串创建了一个对象实例。这正常吗?
(我使用ServiceStack的json序列化器)
c# ×5
binary ×1
collections ×1
constructor ×1
devexpress ×1
grid ×1
gridcontrol ×1
ienumerable ×1
iteration ×1
list ×1
mef ×1
metadata ×1
protobuf-net ×1
servicestack ×1
wpf ×1