我注意到使用Math.Round将double转换为int同时将x64与x86相比较时,性能下降非常显着(~15x).我在Core i7 3770K上的64位Windows上进行了测试.任何人都可以复制它吗?有这么好的理由吗?也许是一些奇怪的边界条件?
仅供参考,我将Math.Round(Test1)与2个近似值进行比较:条件转换(Test2)和6755399441055744技巧(Test3).
运行时间是:
---------------------------
| | x86 | x64 |
|-------+--------+--------|
| Test1 | 0,0662 | 0,9975 |
| Test2 | 0,1517 | 0,1513 |
| Test3 | 0,1966 | 0,0978 |
---------------------------
Run Code Online (Sandbox Code Playgroud)
这是基准代码:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace MathRoundTester
{
class Program
{
private const int IterationCount = 1000000;
private static int dummy;
static void Main(string[] args)
{
var data = new double[100];
var rand = new Random(0);
for (int i = 0; …Run Code Online (Sandbox Code Playgroud) 在Visual Studio 2015(以及某些旧版本)中,在调试C#代码时,可以string通过带有放大镜图标的下拉列表在各种可视化工具(文本,XML,HTML,JSON)中显示变量的值.例如,这也适用于某些非字符串类型System.Xml.Linq.XElement.是否可以使用这些内置可视化工具来显示我自己的自定义类型变量的值?
语境:
我需要能够快速检查复杂自定义类型的状态,该类型只能在多行文本环境中可接受地显示.