小编red*_*alx的帖子

在什么条件下.NET JIT编译器执行自动矢量化?

新的RyuJIT编译器是否曾生成向量(SIMD)CPU指令,何时?

附注:System.Numerics命名空间包含允许显式使用Vector操作的类型,这些操作可能会也可能不会生成SIMD指令,具体取决于CPU,CLR版本,JITer版本,是否直接编译为本机代码.这个问题具体是关于何时非矢量代码(例如在C#或F#中)将产生SIMD指令.

.net simd vectorization auto-vectorization ryujit

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

实现自我更新软件的最佳方法

我们有一个最小的'updater'exe,用于检查远程URL以获取更新,下载它们并在启动实际应用程序之前替换磁盘上的文件.但是,如果我们想要更换更新程序EXE,那么AFAIK我们有两个选择:

1)卷影复制程序集,其中.Net将创建EXE(和任何引用的程序集)的卷影副本并加载这些程序集,以便可以替换非卷影程序集,并在下次启动应用程序时使用.

2)确定要替换的文件,并在磁盘上重命名/移动它们.Windows似乎允许重命名/移动锁定的文件,因此我们可以移动文件并复制新的程序集.再次,在下一次启动应用程序时,我们将启动新的程序集.这里提到这种方法

这第二种方法是推荐的方法吗?这种方法有什么缺陷吗?

.net shadow-copy

11
推荐指数
3
解决办法
5262
查看次数

IIS7集成管道:maxConcurrentRequestsPerCPU和requestsQueueLimit设置之间的交互

首先,有一个很好的概述IIS7 HTTP请求生命周期和影响性能的各种设置:

IIS 7.0和6.0上的ASP.NET线程使用情况

但非常具体,在dotNet 4中,maxConcurrentRequestsPerCPUrequestsQueueLimit的默认值设置为5000.例如,相当于:(在aspnet.config中):

<system.web>
   <applicationPool 
      maxConcurrentRequestsPerCPU="5000" 
      maxConcurrentThreadsPerCPU="0" 
      requestQueueLimit="5000" /> (** see note below)
</system.web>
Run Code Online (Sandbox Code Playgroud)

在我看来,在多CPU /核心服务器上,在'perCPU'限制之前,始终会调用requestQueueLimit.因此,如果每个CPU最多需要5000个请求,那么我希望requestQueueLimit需要增加到5000*CPUCount或者只是完全禁用.

我的解释是否正确?如果是这样,我可以禁用requestQueueLimit吗?(将其设为零?).关于此设置的文档似乎没有解决这个问题(所以我可能会遗漏某些内容或误读?)

**上述文章的旁注:requestQueueLimit命名不佳.它实际上限制了ASP.NET可以同时处理的最大请求数.这包括排队的请求和正在执行的请求.如果"请求当前"性能计数器超过requestQueueLimit,则将拒绝新的传入请求,并显示503状态代码)

asp.net iis iis-7 asp.net-2.0 integrated-pipeline-mode

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

如何从XmlReader创建XML文件?

如何从System.Xml.XmlReader编写XML文件?

我认为这将是一个简单的问题,但每当我搜索时,我似乎最终都会将文件读取到读取器或逐个节点地编写.

XmlReader对象传达存储在数据库中的xml,只需要从数据库中传出一个文件即可.有没有简单的方法来做到这一点?

        SqlCommand dataCmd = new SqlCommand(sqlText, Conn);
        System.Xml.XmlReader dataReader = null;

        dataCmd.CommandTimeout = 60000;

        Conn.Open();
        dataReader = dataCmd.ExecuteXmlReader();
        dataReader.Read();
Run Code Online (Sandbox Code Playgroud)

c# xml xmlwriter xmlreader

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

在Visual Studio 2013中启动aspx SOAP服务项目导致StackOverflowException

这是Visual Studio中的一个C#Web服务项目,已经存在了很多年.今天它开始在Visual Studio中启动时抛出异常,但只有在附加调试器时才会抛出异常.

例外是:

System.StackOverflowException was unhandled
Message: An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll
Run Code Online (Sandbox Code Playgroud)

这是Visual Studio 2013 Update 3.

堆栈跟踪的相关部分:

System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.JsonDataContract.WriteJsonValue(System.Runtime.Serialization.XmlWriterDelegator jsonWriter, object obj, System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson context, System.RuntimeTypeHandle declaredTypeHandle)   Unknown
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle) Unknown
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerializeReference(System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, System.RuntimeTypeHandle declaredTypeHandle)    Unknown
[Lightweight Function]  
System.Runtime.Serialization.dll!System.Runtime.Serialization.Json.JsonDataContract.WriteJsonValue(System.Runtime.Serialization.XmlWriterDelegator jsonWriter, object obj, System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson context, System.RuntimeTypeHandle declaredTypeHandle)   Unknown
System.Runtime.Serialization.dll!System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(System.Runtime.Serialization.DataContract dataContract, System.Runtime.Serialization.XmlWriterDelegator xmlWriter, object obj, bool verifyKnownType, System.RuntimeTypeHandle declaredTypeHandle, System.Type …
Run Code Online (Sandbox Code Playgroud)

.net asp.net asmx visual-studio webmethod

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

实现并行无限循环的最佳方法是什么?

我已经习惯在.Net的并行扩展中使用Parallel.For(),因为它是一种简单的并行化代码的方法,而无需手动启动和维护线程(这可能是繁琐的).我现在正在看一个无限循环(做一些事情,直到我发出信号停止),我希望并行化,没有一个参数可以自由Parallel.For()重载这样做,所以想知道这里最好的方法是什么是.原则上我可以这样做:

Parallel.For(0, int.Max)
Run Code Online (Sandbox Code Playgroud)

但我怀疑这可能不是工作分区逻辑处理的预期/有效模式(?)

另一种选择是:

for(;;)
{
    Parallel.For(0, 128, delegate()
    {
       // Do stuff.
    }
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不够优雅,也可能导致低效的工作分区.

现在我的直觉是通过创建和维护我自己的线程来手动执行此操作,但我有兴趣获得一些反馈/意见.谢谢.

===更新===

我在接受的答案中使用了文章中的代码的简化版本(我删除了ParallelOptions参数).这是代码......

public class ParallelUtils
{
    public static void While(Func<bool> condition, Action body) 
    { 
        Parallel.ForEach(IterateUntilFalse(condition), ignored => body()); 
    }

    private static IEnumerable<bool> IterateUntilFalse(Func<bool> condition) 
    { 
        while (condition()) yield return true; 
    }
}
Run Code Online (Sandbox Code Playgroud)

一个示例用法是:

Func<bool> whileCondFn = () => !_requestStopFlag;
ParallelUtils.While(whileCondFn, delegate()
{
    // Do stuff.


});
Run Code Online (Sandbox Code Playgroud)

.net c# parallel-processing parallel-extensions parallel-for

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

结构类型数组的性能

例:

// Potentially large struct.
struct Foo
{ 
   public int A;
   public int B;
   // etc.
}

Foo[] arr = new Foo[100];
Run Code Online (Sandbox Code Playgroud)

如果Foo是100字节结构,则在执行以下语句期间将在内存中复制多少字节:

int x = arr[0].A

也就是说,将arr [0]计算为某个临时变量(Foo实例的100字节副本),然后将.A复制到变量x(4字节副本).

或者是编译器,JITer和CLR的某种组合能够优化此语句,以便将4个字节A直接复制到x.

如果执行了优化,当项目被保存在一个List<Foo>数组中或者数组作为一个IList<Foo>或一个数组传递时,它是否仍然存在ArraySegment<Foo>

c# arrays performance struct

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

有什么好的姓氏数据库吗?

我正在寻找生成一些数据库测试数据,特别是包含人名的表列.为了更好地指示索引在基于名称的搜索方面的工作情况,我希望尽可能接近真实世界名称及其真实的频率分布,例如,许多不同的名称,其频率分布在某些幂律分布上.

理想情况下,我正在寻找一个免费提供的数据文件,其名称后跟每个名称的单个频率值(或等效概率).

基于盎格鲁撒克逊人的名字会很好,尽管来自其他文化的名字也会有用.

database testing test-data

7
推荐指数
1
解决办法
2386
查看次数

Nullable <T> .GetHashCode()是一个糟糕的哈希码函数吗?

执行情况Nullable<T>.GetHashCode()如下:

public override int GetHashCode()
{
    if (!this.HasValue)
    {
        return 0;
    }
    return this.value.GetHashCode();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果基础值也生成哈希码0(例如bool设置为false或int32设置为0),那么我们有两个常见的不同对象状态具有相同的哈希码.在我看来,更好的实现将是类似的.

public override int GetHashCode()
{
    if (!this.HasValue)
    {
        return 0xD523648A; // E.g. some arbitrary 32 bit int with a good mix of set and 
                           // unset bits (also probably a prime number).
    }
    return this.value.GetHashCode();
}
Run Code Online (Sandbox Code Playgroud)

.net c# hashcode

7
推荐指数
1
解决办法
1358
查看次数

如何在 ASP.NET Core 2.2 中反序列化 ProblemDetails

我有一个调用 ASP.NET Core REST 服务的 C# 客户端应用程序。如果服务器上的 REST 服务失败,则它被配置为根据rfc7807返回“问题详细信息”json 响应,例如:

{
    "type": "ServiceFault",
    "title": "A service level error occurred executing the action FooController.Create
    "status": 500,
    "detail": "Code=ServiceFault; Reference=5a0912a2-df17-4f27-8e5a-0d4828022306; Message=An error occurred creating a record.",
    "instance": "urn:foo-corp:error:5a0912a2-df17-4f27-8e5a-0d4828022306"
}
Run Code Online (Sandbox Code Playgroud)

在客户端应用程序中,我想将此 json 消息反序列化为ProblemDetails的实例,作为访问详细信息的便捷方式。例如:

ProblemDetails details = await httpResp.Content.ReadAsAsync<ProblemDetails>();
Run Code Online (Sandbox Code Playgroud)

但是,反序列化会抛出以下异常:

System.Net.Http.UnsupportedMediaTypeException:没有 MediaTypeFormatter 可用于从媒体类型为“application/problem+json”的内容中读取类型为“ProblemDetails”的对象。

asp.net-core

7
推荐指数
1
解决办法
2612
查看次数