小编woj*_*ojo的帖子

有没有办法在一个命令中获取git根目录?

Mercurial有一种打印根目录(包含.hg)的方法

hg root
Run Code Online (Sandbox Code Playgroud)

在git中是否有类似的东西来获取包含.git目录的目录?

git version-control

613
推荐指数
18
解决办法
18万
查看次数

在Windows Vista和Windows 7上使用HEAP_NO_SERIALIZE使用堆内存函数减少约100倍的原因

我试图追踪Windows Vista和Windows 7中堆内存功能的巨大减速(我没有在任何服务器版本上测试).它根本不会发生在Windows XP上,只发生在微软较新的操作系统上.

我最初使用Windows上的PHP编译遇到了这个问题.脚本本身似乎以预期的速度运行,但在脚本执行后,我在内部PHP关闭功能中遇到了1-2秒的延迟.在启动调试后,我发现它与PHP内存管理器使用HeapAlloc/ HeapFree/有关HeapReAlloc.

我追溯到HEAP_NO_SERIALIZE堆函数上使用标志:

#ifdef ZEND_WIN32
#define ZEND_DO_MALLOC(size) (AG(memory_heap) ? HeapAlloc(AG(memory_heap), HEAP_NO_SERIALIZE, size) : malloc(size))
#define ZEND_DO_FREE(ptr) (AG(memory_heap) ? HeapFree(AG(memory_heap), HEAP_NO_SERIALIZE, ptr) : free(ptr))
#define ZEND_DO_REALLOC(ptr, size) (AG(memory_heap) ? HeapReAlloc(AG(memory_heap), HEAP_NO_SERIALIZE, ptr, size) : realloc(ptr, size))
#else
#define ZEND_DO_MALLOC(size) malloc(size)
#define ZEND_DO_FREE(ptr) free(ptr)
#define ZEND_DO_REALLOC(ptr, size) realloc(ptr, size)
#endif
Run Code Online (Sandbox Code Playgroud)

和(这实际上是设置为默认HeapAlloc/ HeapFree/ HeapReAlloc在函数)start_memory_manager:

#ifdef ZEND_WIN32
    AG(memory_heap) = HeapCreate(HEAP_NO_SERIALIZE, 256*1024, 0);
#endif
Run Code Online (Sandbox Code Playgroud)

我删除了HEAP_NO_SERIALIZE参数(替换为0),它修复了问题.脚本现在可以在CLI和SAPI Apache …

heap winapi memory-management windows-vista windows-7

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

.NET WCF错误生成不正确的SOAP 1.1错误代码值

我正在尝试使用FaultException和FaultException <T>来确定我们的应用程序中的最佳使用模式.我们需要支持WCF以及非WCF服务使用者/客户端,包括SOAP 1.1和SOAP 1.2客户端.

仅供参考:使用带有wsHttpBinding的FaultExceptions会导致SOAP 1.2语义,而使用带有basicHttpBinding的FaultExceptions会导致SOAP 1.1语义.

我使用以下代码抛出FaultException <FaultDetails>:

  throw new FaultException<FaultDetails>(
      new FaultDetails("Throwing FaultException<FaultDetails>."),
      new FaultReason("Testing fault exceptions."),
      FaultCode.CreateSenderFaultCode(new FaultCode("MySubFaultCode"))
      );
Run Code Online (Sandbox Code Playgroud)

FaultDetails类只是一个简单的测试类,它包含一个字符串"Message"属性,如下所示.

使用wsHttpBinding时,响应是:

<?xml version="1.0" encoding="utf-16"?>
<Fault xmlns="http://www.w3.org/2003/05/soap-envelope">
<Code>
  <Value>Sender</Value>
  <Subcode>
    <Value>MySubFaultCode</Value>
  </Subcode>
</Code>
<Reason>
  <Text xml:lang="en-US">Testing fault exceptions.</Text>
</Reason>
<Detail>
  <FaultDetails xmlns="http://schemas.datacontract.org/2004/07/ClassLibrary" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Message>Throwing FaultException&lt;FaultDetails&gt;.</Message>
  </FaultDetails>
</Detail>
Run Code Online (Sandbox Code Playgroud)

根据SOAP 1.2规范,这看起来是正确的.主/根"代码"是"发件人",其"子代码"为"MySubFaultCode".如果服务使用者/客户端正在使用WCF,则客户端上的FaultException也会模仿相同的结构,其中faultException.Code.Name为"Sender",faultException.Code.SubCode.Name为"MySubFaultCode".

使用basicHttpBinding时,响应是:

<?xml version="1.0" encoding="utf-16"?>
<s:Fault xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <faultcode>s:MySubFaultCode</faultcode>
  <faultstring xml:lang="en-US">Testing fault exceptions.</faultstring>
  <detail>
    <FaultDetails xmlns="http://schemas.datacontract.org/2004/07/ClassLibrary" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <Message>Throwing FaultException&lt;FaultDetails&gt;.</Message>
    </FaultDetails>
  </detail>
</s:Fault>
Run Code Online (Sandbox Code Playgroud)

这看起来不对.看一下SOAP 1.1规范,当我使用FaultCode.CreateSenderFaultCode(new FaultCode("MySubFaultCode"))时,我希望看到"faultcode"的值为"s:Client.MySubFaultCode".此外,WCF客户端的结构也不正确.faultException.Code.Name是"MySubFaultCode"而不是"Sender",而faultException.Code.SubCode是null而不是faultException.Code.SubCode.Name是"MySubFaultCode".此外,faultException.Code.IsSenderFault为false.

使用FaultCode.CreateReceiverFaultCode时出现类似问题(新的FaultCode("MySubFaultCode")):

  • 符合SOAP 1.2的预期效果
  • 生成"s:MySubFaultCode"而不是"s:Server.MySubFaultCode",并且SOAP 1.1的faultException.Code.IsReceiverFault为false

这个项目也是由其他人在2006 …

.net wcf soap web-services

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