相关疑难解决方法(0)

序列化和Yield语句

是否可以序列化包含yield语句的方法(或包含此类方法的类),以便在对类进行重新水化时,保留生成的迭代器的内部状态?

.net c# continuations yield yield-return

16
推荐指数
2
解决办法
1810
查看次数

是否有NOSQL数据层设计模式?

我已经看到了一些想法,而不是像创建,更新,插入,删除(CRUD)使用Get和Put.非常好.但是,我还没有看到如何处理复杂性.我被告知,"只需为您需要的每种查询类型编写一个方法".

在我开始考虑限定符(where子句)之前,大多数NOSQL似乎都没问题 - 可能会有很多变化.是否已经有一个很好的方案,以合理的方式实现限定符,只使用方法名称和参数约定?也许有某种动词/名词方案运作良好,但它本身并不是一种语言.

我不是在回答"正确"的答案......我希望我能从中学到一些思想流派.

发现RavenDB制造商的这篇博文:http://ayende.com/blog/4562/ravendb-index-management

我们可以在一个类上实现多个索引吗?

我甚至发现,有可能要序列化匿名委托http://blogs.microsoft.co.il/blogs/aviwortzel/archive/2008/06/20/how-to-serialize-anonymous-delegates.aspx 我想,如果这是可能的,他们可能会使用这样的东西.

但是,如果我们无法访问相同的程序集(例如Silverlight),该怎么办?在这里发现这篇文章:http: //ayende.com/blog/4766/accessing-ravendb-from-silverlight

IEnumerable<T>对象是客户端还是服务器端搜索的?在通过网络发送结果集之前,我们如何通过NOSQL来缩小结果集,而不将其锁定为一个唯一ID?

更新:我最终通过RavenDB向Ayende发送电子邮件.他善意回答了我的问题(如下):

你能做的就是写:

  public IEnumerable<T> FindAll(Expression<Func<T,bool>> whereClause)
  {
      return session.Query<T>().Where(whereClause).ToList();
  }
Run Code Online (Sandbox Code Playgroud)

这使用linq来计算你的意图,然后使用RavenDB的语法将查询发送到服务器.在服务器上,我们分析您的查询,查询优化器检查是否存在可以回答此查询的现有索引,如果没有,它将为您创建临时索引.

如果您足够查询该临时索引,RavenDB将使其永久化.因此,自我优化自己的运作.

您是否从"Silverlight"用例中获得了很大的帮助?

我们完全支持Silverlight.

RavenDB可以处理多个索引服务器端吗?

是.事实上,我们有一些客户有> 500个索引运行没有问题.

来自RavenDB的Ayende的信息结束

在设计的查询语言(即的FindAll /哪里/代表),蒙戈似乎通过JSON ......实现了一点这个http://www.mongodb.org/display/DOCS/Indexes 我希望我能知道更多关于它.

这听起来更接近:http://www.mongodb.org/display/DOCS/MapReduce

序列化在C#中序列化匿名委托的一个有趣的线程.这不是直接相关的...但我只是想稍微深入了解一下,所以我对潜力有了更多了解.

.net design-patterns data-access-layer nosql

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

支持序列化协同程序的语言

我认为目前的语言不存在这种支持.我认为我想做的事情可以通过"工作流引擎"来解决.但我对工作流程的问题通常是:

  1. 声明/冗长,我发现一种更为简洁的命令式风格
  2. 重量级,我会有很多简单但不同的小型状态机

我已经研究了在C#中序列化迭代器,但这并没有让我到达我想要的位置.我目前正在考虑在Boo中组装一个DSL,但不确定我是否能够在Boo中获得类似coroutine的行为,并且能够将其序列化.

这是我想做的有限虚构的例子.主要问题是,在例程中的任何时候,您可能需要获得用户输入.输入之间的时间可能很长,因此需要将服务状态序列化为磁盘.

    def RunMachine(user)
      var lever = user.ChooseLever()
      lever.Pull()
      var device = CreateDevice(user)
      machine.Add(device)
      machine.Run()

   def CreateDevice(user)
      var color = user.ChooseColor()
      var shape = user.ChooseShape()
      return Device(color, shape)
Run Code Online (Sandbox Code Playgroud)

更新

我在CPython中有一个工作"引擎".它捎带在python中的迭代器/ yield支持上.所以代码看起来像这样:

def escape(self, you):        
    roll = yield self.game.rollDice(you)
    if roll < 5:
        self.caughtAction(you)                  
Run Code Online (Sandbox Code Playgroud)

哪里rollDice可以打断.用一些用户动作.但是,CPython不会序列化迭代器.

由于游戏的整个状态可以定义为一系列命令,因此我将游戏状态序列化为协程开始的点,然后是剩余的命令列表.所以保存/恢复如下所示:

def dumpGameState(game):
    if gameState.partialState:
        return pickle.dumps({ 'partialState': game.partialState, 'partialInputs': game.partialInputs })

    return pickle.dumps(game)

def loadGameState(data):
    state = pickle.loads(data)

    if state.__class__ is …
Run Code Online (Sandbox Code Playgroud)

dsl serialization programming-languages coroutine

7
推荐指数
2
解决办法
1945
查看次数

如何调试(步入)BinaryFormatter.Deserialize()?

我的应用程序尝试反序列化客户端发送的数据,但失败并出现以下错误:

抛出异常:mscorlib.dll中的"System.Runtime.Serialization.SerializationException"

附加信息:无法获得成员'<.ctor> b__0'.

谷歌搜索没有结果.好吧,我决定进入反序列化逻辑,并试图找出导致这种情况的原因.嗯,有一天过去了,我离我很近了.

我使用Microsoft Reference Source网站上的说明来配置Visual Studio.它下载了一些东西

MicrosoftPublicSymbols\mscorlib.pdb\
   DCF1E4D31F6944AC87E7A634262BEE881\mscorlib.pdb (780kb)
   E47257B512BA49BC9FC367C532FC5F1E2\mscorlib.pdb (953kb)
Run Code Online (Sandbox Code Playgroud)

但是调试器没有介入.

我google了更多,并找到了另一种方法 - 安装dotTrace应用程序并将其用作源服务器.这也无济于事.我仍然看到以下内容:

在此输入图像描述

Symbol Load Information mscorlib.pdb的弹出窗口说

C:\ Users\me\AppData\Local\Temp\SymbolCache\MicrosoftPublicSymbols\mscorlib.pdb\e47257b512ba49bc9fc367c532fc5f1e2\mscorlib.pdb:已加载符号.

我可以介入System.Windows.Forms,System.Linq等 - 所以一般来说,它可以工作 - 它只是这个特定的调用BinaryFormatter.Deserialize()不起作用.可能是什么原因以及如何让它进入?

可能是因为SecuritySafeCritical属性?

[System.Security.SecuritySafeCritical] 
public Object Deserialize(Stream serializationStream)
Run Code Online (Sandbox Code Playgroud)

我正在使用VS 2015 .Net 4.5.2(虽然我试过4.5但结果相同).

.net debugging debug-symbols visual-studio

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