小编Mat*_*olf的帖子

以下PLINQ代码没有任何改进

我没有看到使用以下代码处理速度的任何改进:

IEnumerable<Quote> sortedQuotes = (from x in unsortedQuotes.AsParallel()
                                           orderby (x.DateTimeTicks)
                                           select x);
Run Code Online (Sandbox Code Playgroud)

顺序版本:

IEnumerable<Quote> sortedQuotes = (from x in unsortedQuotes
                                           orderby (x.DateTimeTicks)
                                           select x);
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?我将源集合中的项目数量从数千个变为数千万个,并且没有大小显示并行版本即将发布.

任何提示赞赏.顺便说一句,如果有人知道更快速的排序方式(给定我指示的项目变量类型(包含项目在集合中排序的长DateTimeTicks),这也是值得欣赏的.

编辑:"有效排序" - >尽快.

谢谢

c# linq sorting plinq

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

RavenDB,只有用嵌入式数据库存储数据的方法是在'系统数据库'中?

我使用嵌入式数据库,并想知道对数据进行操作的唯一方法是使用系统数据库吗?我查看了管理工作室,看到我的所有数据都被转储到系统数据库中.即使我在管理工作室内创建了一个新的数据库,这个新的数据库仍未受到影响.使用代码方法我没有进一步深入,因为在嵌入式实例中似乎不支持多租户.那么唯一的方法是存储和访问SYSTEM DATABASE的数据?

谢谢

c# database ravendb ravendb-studio

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

PubSub如何在BookSleeve/Redis中工作?

我想知道使用BookSleeve发布和订阅频道的最佳方式是什么.我目前实现了几种静态方法(见下文),这些方法允许我将内容发布到特定通道,并将新创建的通道存储在其中private static Dictionary<string, RedisSubscriberConnection> subscribedChannels;.

这是正确的方法,因为我想发布到通道并订阅同一个应用程序中的通道(注意:我的包装器是一个静态类).即使我想发布和订阅,是否足以创建一个频道?显然,我不会发布到在同一个应用程序中订阅的相同频道.但我测试了它并且它有效:

 RedisClient.SubscribeToChannel("Test").Wait();
 RedisClient.Publish("Test", "Test Message");
Run Code Online (Sandbox Code Playgroud)

它起作用了.

在这里我的问题:

1)设置专用发布频道和专用订阅频道而不是为两者使用一个频道是否更有效?

2)语义上"channel"和"PatternSubscription"有什么区别?我的理解是,我可以PatternSubscription()在同一个频道上订阅几个"主题",对吗?但是如果我想为每个"主题"调用不同的回调,我必须为每个主题设置一个正确的通道吗?这样有效吗?或者你会建议反对吗?

这里是代码片段.

谢谢!!!

    public static Task<long> Publish(string channel, byte[] message)
    {
        return connection.Publish(channel, message);
    }

    public static Task SubscribeToChannel(string channelName)
    {
        string subscriptionString = ChannelSubscriptionString(channelName);

        RedisSubscriberConnection channel = connection.GetOpenSubscriberChannel();

        subscribedChannels[subscriptionString] = channel;

        return channel.PatternSubscribe(subscriptionString, OnSubscribedChannelMessage);
    }

    public static Task UnsubscribeFromChannel(string channelName)
    {
        string subscriptionString = ChannelSubscriptionString(channelName);

        if (subscribedChannels.Keys.Contains(subscriptionString))
        {
            RedisSubscriberConnection channel = subscribedChannels[subscriptionString];

            Task  task = channel.PatternUnsubscribe(subscriptionString);

            //remove channel subscription
            channel.Close(true);
            subscribedChannels.Remove(subscriptionString);

            return …
Run Code Online (Sandbox Code Playgroud)

c# redis servicestack booksleeve

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

我可以在接口方法中检索接口类型吗?

如何确定DoSomething()调用该方法的底层接口?其他问题:我可以在MyClass构造函数中确定底层接口吗?我假设不是因为在实例化时不知道,对吗?

编辑:我不是在寻找显式接口实现,而是以不同的方式来确定底层接口.

public interface ITest
{
    void DoSomething();
    //....more methods
}

public interface IDecoy
{
    void DoSomething();
    //...more methods
}

public class MyClass : ITest, IDecoy
{
    public void DoSomething()
    {
        //Question: How can I determine the underlying interface that called this method?
        //at one time it is ITest, at another IDecoy. How can I figure out which one at each time?
    }
}

public class Test
{
    public Test()
    {
        ITest myClassInstance1 = new MyClass();
        IDecoy …
Run Code Online (Sandbox Code Playgroud)

c# reflection interface

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

Redis Server失败,Socket失败,超出输出缓冲区限制,如何增加限制?

我在一台机器上做基本的pub/sub,我的客户端是StackExchange-Redis的C#客户端,我在同一台机器上运行基于Windows的Redis服务器(服务器版本2.8.4)

当我发布大量数据(略大于32mb)时,我收到以下错误消息.我不确定错误是源自客户端还是由服务器引发.显然超出了"输出缓冲区限制".我怎样才能增加限额?我需要偶尔发送这种有效载荷的数据(虽然这是例外而不是常态).

我不确定这是否相关,但每次启动我的服务器时,打开/生成的文件大小约为32gb(???),文件名为"RedisQFork_3564.dat".这个文件用的是什么?这一切都与我的问题有关吗?

服务器上的错误消息

[10144] 23 May 17:37:29.293 # Client addr=127.0.0.1:47943 fd=9 name=DESKTOP-PC a ge=20 idle=13 flags=N db=0 sub=7 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=88 oll=1 omem=108527608 events=rw cmd=subscribe scheduled to be closed ASAP for overcomi ng of output buffer limits. [10144] 23 May 17:37:38.802 # Client addr=127.0.0.1:47948 fd=10 name=DESKTOP-PC age=9 idle=9 flags=N db=0 sub=7 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=88 oll=1 omem=109314040 events=rw cmd=subscribe scheduled to be closed ASAP for overcomin g of output buffer limits.

客户端上的错误消息

Message: Connection to Redis …

c# redis stackexchange.redis

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

C#,容器类设计模式?

我钻研了C#,但遇到了一个我似乎无法解决的问题:

我设计了一个财务回溯测试和交易引擎,作为其中的一部分,我想实现一个"策略容器".此策略容器应有两个用途.(1)保存执行数学计算的不同策略的实例,以及(2)提供访问器以便将新的tick数据传递到策略实例并从策略实例接收某些信息.

我上面提到的不同策略应该是唯一的类,但是它们来自基类.我想在这些策略中执行完全不同的操作,因此我认为将它们设计为从一个基类派生的单独类是可行的.一个复杂因素是我需要策略容器中包含的每个策略类的多个实例.每个策略类还包含一个股票代码列表,每个符号应该在策略实例上获得.

Strategy容器的另一个重点是它可以创建,实例化,然后还可以调用每个策略实例.

我想问一下你们有什么样的想法我可以如何设计和实现这个:

  • 什么是整体最佳设计模式?
  • 如上所述,如果我为每个策略创建不同的类,那么我显然最终会得到不同的类型,我怎么能在策略容器中的一个容器/集合中保存所有这些?
  • 我怎样才能通过反射或其他方式创建,实例化和调用每个单一策略实例的方法,而不知道我最终会得到多少.我知道策略的名称和类型,我知道股票代码的名称.
  • 我只想提供我想要连接的策略(我提供策略名称=类名?),并为每个策略提供股票代码列表.策略容器将为列表所提供的策略类型的每个策略中的每个符号创建实例,并随后调用"RunStrategy(引用引用)"方法,该方法将新引号提供给每个实例,以便可以执行计算.
  • 一个目标是保持每个策略类的接口尽可能干净,大多数标准(重复)功能在derived-from基类中实现.

我不是要求完整的源代码,而是为了想法你认为我应该如何设计这个东西,以及我如何能够完成上述每一点.这对我自己来说并不会变成任何商业产品.我很乐意编写实现数学比特的代码,但我对设计模式和系统架构不太熟悉.

编辑:Graymatter,我玩了一下,似乎你提供了我正在寻找的东西.非常感谢.

class Program
{
    static void Main(string[] args)
    {
        List<IStrategy> container = new List<IStrategy>();

        container.Add(new StrategyOne());

        container[0].AddValue(50);

        Console.ReadLine();
    }




}

public interface IStrategy
{
    void AddValue(int value);  
}


public class StrategyOne : StrategyBase
{
    public override void Calculates()
    {
        Console.WriteLine("This is my value: " + myValue);
    }

}

public class StrategyBase : IStrategy
{
    protected int myValue;

    public void AddValue(int value)
    {
        Console.WriteLine("Run Strategy in Base");

        myValue = value; …
Run Code Online (Sandbox Code Playgroud)

c# reflection containers class base

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

TPL Dataflow在运行时中断了LinkTo()

我有一个TransformManyBlock<Tin, Tout>和在运行时添加消费者(ActionBlocks)通过LinkTo(...).

  1. TransformManyBlock是正确的数据流块,消耗元素,转换它们,然后输出(输入相同的数字元素作为输入)给几个消费者(每个链接到消费者消费相同的元素,如广播)?我故意不选择BroadCastBlock,因为它似乎无法像BufferBlock一样转换元素.

  2. 我想知道在运行时如何取消消费者链接(ActionBlocks)?就我所见,LinkTo()似乎没有提供这样的功能.

c# concurrency dataflow task-parallel-library tpl-dataflow

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

ProtoBuf-Net错误消息"源数据中的无效字段:0"

我成功序列化了以下类的实例,但是当我在收到以下错误消息后尝试反序列化时:" Invalid field in source data: 0".

我不知道它是指什么,因为我发现下面的课程直截了当.我刚刚将protobuf-net版本更新为2.00.614(运行时版本:2.0.50727).

知道我是否可能忽视一些微不足道的事情?

[ProtoContract]
public class TimeSeriesProperties 
{
    [ProtoMember(1)]
    public string TimeSeriesName { get; private set; }
    [ProtoMember(2)]
    public string FileName { get; private set; }
    [ProtoMember(3)]
    public string TemplateName { get; private set; }
    [ProtoMember(4)]
    public int PacketLength { get; private set; }
    [ProtoMember(5)]
    public long FileSizeBytes { get; set; }
    [ProtoMember(6)]
    public long NumberRecords { get; set; }
    [ProtoMember(7)]
    public DateTime DateTimeStart { get; set; }
    [ProtoMember(8)]
    public DateTime DateTimeEnd …
Run Code Online (Sandbox Code Playgroud)

c# serialization protobuf-net deserialization

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

为什么我不能在公共抽象类的方法中使用Linq Where子句?

我有以下构造,我不能使用该Where子句作为linq查询的一部分,我想知道为什么:

public abstract class Foo : IFoo
{
    public Foo(List<int> testCollection)
    {
        var result = testCollection.Where(.......).Select(.....);

    }
}
Run Code Online (Sandbox Code Playgroud)

Intellisense不识别该Where子句,我也得到编译错误.这与我试图在抽象类中使用它有关吗?我使用.Net 4.5,我可以在常规类中构建Linq查询.

c# linq dictionary list where

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

将Dictionary转换为两个列表的最佳方法

如何将类型转换Dictionary<DateTime, double>Tuple<List<DateTime>, List<double>>

谢谢

编辑:以下是否保证两个列表中的项目顺序相同? var abc = new Tuple<List<DateTime>, List<double>>(_data.Keys.ToList(), _data.Values.ToList());

c# ienumerable dictionary list

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