为什么使用构造函数创建结构比直接赋值更慢?在下面的代码中,我使用自定义构造函数获得10秒,而没有使用6秒!纯循环需要5秒钟.自定义构造函数比直接访问慢五倍(!sic).
是否有任何黑客或其他东西加速自定义构造函数?
class Program
{
public struct Point
{
public int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
for(int i =0; i < int.MaxValue; i++)
{
var a = new Point(i, i);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
for (int i = 0; i < int.MaxValue; i++)
{
var a = new Point();
a.x = i;
a.y = i;
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); …Run Code Online (Sandbox Code Playgroud) 我有一个 100Gb 大小的 xml 文件,并使用此代码使用 SAX 方法解析它
file, err := os.Open(filename)
handle(err)
defer file.Close()
buffer := bufio.NewReaderSize(file, 1024*1024*256) // 33554432
decoder := xml.NewDecoder(buffer)
for {
t, _ := decoder.Token()
if t == nil {
break
}
switch se := t.(type) {
case xml.StartElement:
if se.Name.Local == "House" {
house := House{}
err := decoder.DecodeElement(&house, &se)
handle(err)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是 golang 工作很慢,它似乎是由执行时间和磁盘使用率决定的。我的硬盘能够以大约 100-120 mb/s 的速度读取数据,但 golang 仅使用 10-13 mb/s。为了实验,我用 C# 重写了这段代码:
using (XmlReader reader = XmlReader.Create(filename)
{
while (reader.Read())
{ …Run Code Online (Sandbox Code Playgroud)