小编chi*_*tom的帖子

得分/存储板球比赛

这个问题的两个部分:

  • 是否有任何现有的文件格式或软件库可用于评分,存档和/或分析板球游戏?
  • 是否有适用于记录板球比赛所有细节的数据库模式示例?

database database-design file-format

15
推荐指数
2
解决办法
4647
查看次数

.Net 4不断在StrongNameSignatureVerification上浪费一个CPU核心

我们有一个在.Net 4上运行的混合模式汇编应用程序(MFC + WinForms),Windows 2008 R2在一个线程上不断使用100%cpu.

使用ProcessExplorer,我们在忙线程上看到以下堆栈.我们还可以看到另外10个线程只使用0.01%的CPU运行clr.dll!StrongNameSignatureVerification.

旋转线程不会阻止应用程序的其余部分运行,但会浪费CPU时间.

繁忙线程的堆栈跟踪如下:

ntoskrnl.exe!IoAcquireRemoveLockEx+0xe7
ntoskrnl.exe!memset+0x22a
ntoskrnl.exe!KeWaitForSingleObject+0x2cb
ntoskrnl.exe!KeDetachProcess+0x120d
ntoskrnl.exe!PsReturnProcessNonPagedPoolQuota+0x3a3
ntoskrnl.exe!CcSetDirtyPinnedData+0x433
mscorlib.ni.dll+0x2b066a
mscorlib.ni.dll+0x2317ac
mscorlib.ni.dll+0x2b066a
mscorlib.ni.dll+0x2317ac
mscorlib.ni.dll+0x26ccf7
mscorlib.ni.dll+0x237fc4
mscorlib.ni.dll+0x26cc3c
clr.dll+0x21bb
clr.dll!CoUninitializeEE+0xee9b
clr.dll!CoUninitializeEE+0x11463
clr.dll!CoUninitializeEE+0x114dc
clr.dll!CoUninitializeEE+0x1154b
clr.dll!StrongNameErrorInfo+0xa638
clr.dll!StrongNameSignatureVerification+0x144fb
clr.dll!StrongNameSignatureVerification+0x1457d
clr.dll!StrongNameSignatureVerification+0x14638
clr.dll!StrongNameSignatureVerification+0x146d2
clr.dll!StrongNameErrorInfo+0x9977
clr.dll!StrongNameErrorInfo+0xa5bc
clr.dll!StrongNameErrorInfo+0xa553
clr.dll!StrongNameErrorInfo+0xa517
clr.dll!StrongNameErrorInfo+0xa151
clr.dll!StrongNameErrorInfo+0x9501
clr.dll!StrongNameErrorInfo+0xad67
clr.dll!StrongNameSignatureVerification+0x164d9
ntdll.dll!RtlCreateUserProcess+0x8c
ntdll.dll!RtlCreateProcessParameters+0x4e
Run Code Online (Sandbox Code Playgroud)

我能找到的唯一类似帐户就是这个问题:clr.sll!StrongNameSignature验证CPU耗尽虽然线程似乎已经冷了.

我们不签署我们的程序集并且愿意信任它们,有没有办法完全禁用强名称验证?

.net strongname cpu-usage

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

CountdownEvent返回零

我试图使用CountdownEvent只允许线程在事件的计数为零时继续,但我希望初始计数为零.实际上,我希望返回到零行为,每当计数为零时,就会发出事件信号,并且只要线程大于零,就会使线程等待.

我可以使用0初始计数初始化Countdown事件,但是当我尝试添加到计数时,我得到InvalidOperationException "CountdownEvent_Increment_AlreadyZero".

是否有替代类或其他方式我可以使用倒计时事件以避免此限制?

.net c# multithreading countdownevent

13
推荐指数
2
解决办法
4800
查看次数

如何将stacktrace行拆分为命名空间,类,方法文件和行号?

C#堆栈跟踪采用以下形式:

   at Foo.Core.Test.FinalMethod(Doh doh) in C:\Projects\src\Core.Tests\Test.cs:line 21
   at Foo.Core.Test.AnotherMethod(Bar bar)
   at Foo.Core.Test.AMethod() in C:\Projects\src\Core.Tests\Test.cs:line 6
   at Foo.Core.Test.<>c__DisplayClass7.<SomeAnonDelegate>b__6(Object _) in C:\Projects\src\Core.Tests\Test.cs:line 35
Run Code Online (Sandbox Code Playgroud)

如何从每一行检索命名空间,类,方法,文件和行号?

  • 有没有现成的课程要做?
  • 如果不是最好的方法是什么?
  • 正则表达式?我如何贪婪地匹配命名空间但保留类和方法?
  • 自定义解析器?

会欣赏一些想法和意见.

c# regex parsing stack-trace

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

垃圾收集器如何知道堆栈框架上的引用?

现代垃圾收集器(如在CLR,JVM中)使用什么技术来判断哪些堆对象是从堆栈引用的?

具体来说,VM如何从知道堆栈开始的位置解释所有对堆对象的本地引用?

clr stack garbage-collection jvm

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

使用Reactive Extensions(Rx)进行延迟和重复数据删除

我想使用Reactive Extensions转换一些消息,并在一小段延迟后转发它们.

消息看起来像这样:

class InMsg
{
   int GroupId { get; set; }
   int Delay { get; set; }
   string Content { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样:

class OutMsg
{ 
   int GroupId { get; set; }
   string Content { get; set; }
   OutMsg(InMsg in)
   {
       GroupId = in.GroupId;
       Content = Transform(in.Content);  // function omitted
   }
}
Run Code Online (Sandbox Code Playgroud)

有几个要求:

  • 延迟的长度取决于消息的内容.
  • 每条消息都有一个GroupId
  • 如果较新的消息带有与等待传输的延迟消息相同的GroupId,则应丢弃第一个消息,并且仅在新的延迟周期之后发送第二个消息.

给定一个Observable <InMsg>和一个Send函数:

IObservable<InMsg> inMsgs = ...;

void Send(OutMsg o)
{
     ... // publishes transformed messages
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Select来执行转换.

void SetUp()
{
     inMsgs.Select(i …
Run Code Online (Sandbox Code Playgroud)

c# reactive-programming system.reactive

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

像C#的计算引擎这样的东西?

是否有任何C#计算引擎可以在值更改时自动重新计算相关字段?

让我自由泳一秒钟,我想象这样的事情..

 Field<double> quantity = Field.Create<double>("Quantity");
 Field<double> unitCost = Field.Create<double>("Unit Cost");
 Field<double> total = Field.Create<double>("Total");

 total.Calculation((q,uc) => q * uc, quantity, value);
      // would have signature something like this:
      // void Calculation<TR,T1,T1>(Func<TR,T1,T2>, Field<T1>, Field<T2>)
Run Code Online (Sandbox Code Playgroud)

这将设置自动传播依赖值的字段.

 quantity.Value = 5.0;
 unitCost.Value = 1.5;
 Assert.That(total.Value, Is.EqualTo(7.5));
Run Code Online (Sandbox Code Playgroud)

显然这是一个简单的例子,最终用途更类似于复杂电子表格的计算.

进一步思考,如果字段/单元格支持更改通知,那将是惊人的.

c# propagation

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

CLR是否执行"锁定省略"优化?如果不是为什么不呢?

JVM执行一个称为锁定省略的巧妙技巧,以避免锁定仅对一个线程可见的对象的成本.

这里有一个很好的描述:

http://www.ibm.com/developerworks/java/library/j-jtp10185/

.Net CLR是否有类似的功能?如果不是那么为什么不呢?

.net java clr multithreading locking

9
推荐指数
2
解决办法
1269
查看次数

如何找到挂起的终结器队列的原因?

我有一个应用程序,从单词go经历缓慢的内存泄漏.

使用ANTS Memory Profiler我可以看到所有泄漏的内存都由终结器队列的GC根保存.

我怀疑可能发生的事情是终结器已经死锁,等待锁定变为可用.

我们的类都没有实现显式终结器,我们通常会避免使用它们,这使我认为锁可能与系统或库类有关.

我曾经看过SOS.dll终结器队列的内容,如果我正确解释它然后它报告第一个项目是一个实例System.Threading.Thread 但是我不确定队列的头部是否实际代表当前正在处理的对象或下一个待处理的对象.

  • 有什么技巧我可以用来找出最终确定的内容吗?
  • 有没有办法可以找出终结器线程正在等待的锁定?
  • 是否可以打开任何额外的调试来跟踪终结器线程的操作?
  • 我还能看到什么?

更新

终结器线程的堆栈如下所示:

ntdll.dll!_ZwWaitForSingleObject@12()  + 0x15 bytes  
ntdll.dll!_ZwWaitForSingleObject@12()  + 0x15 bytes  
user32.dll!_NtUserPostMessage@16()  + 0x15 bytes     

kernel32.dll!_WaitForSingleObjectExImplementation@12()  + 0x43 bytes     
kernel32.dll!_WaitForSingleObject@8()  + 0x12 bytes  
ole32.dll!GetToSTA()  + 0x72 bytes   

ole32.dll!CRpcChannelBuffer::SwitchAptAndDispatchCall()  - 0x1939 bytes  
ole32.dll!CRpcChannelBuffer::SendReceive2()  + 0xa6 bytes    
ole32.dll!CAptRpcChnl::SendReceive()  + 0x5b7 bytes  
ole32.dll!CCtxComChnl::SendReceive()  - 0x14b97 bytes    
ole32.dll!NdrExtpProxySendReceive()  + 0x43 bytes    
rpcrt4.dll!@NdrpProxySendReceive@4()  + 0xe bytes    
rpcrt4.dll!_NdrClientCall2()  + 0x144 bytes  
ole32.dll!_ObjectStublessClient@8()  + 0x7a bytes    
ole32.dll!_ObjectStubless@0()  + 0xf bytes   

ole32.dll!CObjectContext::InternalContextCallback() …
Run Code Online (Sandbox Code Playgroud)

.net finalizer

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

为什么NUnit的Assert.That(..)有ref重载?

也许我只是愚蠢但你何时以及为什么要使用:

NUnit.Framework.Assert.That<T>(ref T, NUnit.Framework.Constraints.IResolveConstraint, string, params object[])
NUnit.Framework.Assert.That<T>(ref T, NUnit.Framework.Constraints.IResolveConstraint, string)
NUnit.Framework.Assert.That<T>(ref T, NUnit.Framework.Constraints.IResolveConstraint)
Run Code Online (Sandbox Code Playgroud)

取代:

NUnit.Framework.Assert.That(object, NUnit.Framework.Constraints.IResolveConstraint, string, params object[])
NUnit.Framework.Assert.That(object, NUnit.Framework.Constraints.IResolveConstraint, string)
NUnit.Framework.Assert.That(object, NUnit.Framework.Constraints.IResolveConstraint)
Run Code Online (Sandbox Code Playgroud)

通过ref传递给这些方法有什么好处?

c# nunit

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