gpt4 book ai didi

c# - Windows 更新破坏了 .Net 4.x 中的结构构造

转载 作者:行者123 更新时间:2023-11-30 15:56:44 26 4
gpt4 key购买 nike

自从 2017 年 9 月 14 日安装 Windows 更新后,我们在发布版本中创建某些结构时遇到了问题。我注意到在没有更新的计算机上编译的代码按预期运行(“错误的开始:1.1.1990 ...”),在安装了有问题的更新的计算机上,代码无法正常工作(“错误的开始:1.1. 2000...”)。这发生在从版本 4.x 开始的所有 .NET Frameworks 版本中。

 class Program
{
static void Main(string[] args)
{
DateTime start1 = new DateTime(1990, 1, 1, 6, 0, 0);
DateTime end1 = new DateTime(2000, 1, 1, 6, 0, 0);
var r2 = new DateTimeRange(start1, end1);
var r3 = new Range<DateTime>(r2.From, r2.To);
Console.WriteLine($"Wrong start: {r3.From}, correct start: {start1}");
Console.ReadLine();
}
}

public struct DateTimeRange
{
private Range<DateTime> m_range;

public DateTimeRange(DateTime from, DateTime to)
{
m_range = new Range<DateTime>(from, to);
}


public DateTime From
{
get { return m_range.From; }
}

public DateTime To
{
get { return m_range.To; }
}
}

public struct Range<T> where T : struct
{
private T m_from;
private T m_to;


public Range(T from, T to)
{
m_from = from;
m_to = to;
}


public T From
{
get { return m_from; }
}

public T To
{
get { return m_to; }
}
}

最佳答案

我看到了,重启我的机器后。肯定像更新中的错误一样嘎嘎作响。在我的机器上,我看到 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\corjit.dll,日期为 9/6/17, 9:23AM CDT,版本 4.7.2110.0。

该错误特定于 x64 抖动,并且仅在启用优化器的发布版本中出现。它符合我之前在抖动中看到的那种错误,过去大多数优化器错误都与代码处理结构有关。

不幸的是,我很难描述这个错误,代码生成太强大,而且我发现的解决方法乍一看似乎没有在机器代码中产生足够的差异。但是,否则是绕过这些优化器错误的典型方法:

using System.Runtime.CompilerServices;
...
public DateTime From {
[MethodImpl(MethodImplOptions.NoInlining)]
get { return m_range.From; }
}

其他解决方法是强制 32 位模式或回退到 the legacy jitter .请report the bug这样他们就可以解决它,如果您不想花时间,请告诉我,我会处理的。

关于c# - Windows 更新破坏了 .Net 4.x 中的结构构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46223714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com