gpt4 book ai didi

c# - Visual Studio C# 2010 快速调试运行速度比发布快

转载 作者:太空狗 更新时间:2023-10-29 20:37:09 24 4
gpt4 key购买 nike

我有一个只有 2 个线程的 Windows 窗体应用程序。这些线程彼此之间的交互为零,Ala 第一个线程运行时不会干扰第二个线程。它们之间没有同步,因为不需要同步。第一个线程处理应用程序的 UI,更改颜色和标签,并运行一个计时器以捕获一些用户输入,该计时器每 200 毫秒触发一次。第二个线程涉及更多,并不断运行其编码,直到用户通过退出应用程序将其关闭。

第二个线程首先从内存中读取数据并将数据存储到一个列表中,然后使用这些数据进行一些计算。我有一个 StopWatch 类计时器来测量完成第二个线程的一次迭代所需的时间。这个计时器在线程的最开始被重置和启动,然后在线程完成迭代后停止并打印到控制台。这是我获取性能数据的地方。我一直允许 Thread 运行至少 1000 次迭代,然后在不包括第一次运行的情况下进行平均。

构建的 DEBUG 版本,即由 VSHOST 运行的构建,或者在 Visual Studio C# 2010 Express 中按 F5 时运行的构建。时间平均为 0.00035s,即 0.35ms。

当应用程序在 VSHOST 之外运行时,可以通过按 Ctrl-F5 或从按 BUILD 时生成的 .exe 运行应用程序。我还使用 REBUILD 以绝对零更改来测试它。计时平均为 0.365 秒,即 365 毫秒。使用 Release Build 大约慢 1000 倍。

我完全不知道发生了什么。 VSHOST 的作用是让程序运行得如此之快。我已确保所有变量初始化都已考虑并正确无误。话虽如此,我不知道为什么会发生这样的事情。关于为什么我会出现这种性能下降的任何见解?

作为旁注,我使用的计算机是 64 位,具有带超线程的四核 i7、16 GB 内存和双 HD6750。所以这似乎不是线程太多的问题,这里唯一可能是超线程的问题。

以我的应用程序的形式呈现的一段代码。但是,不可能提供工作代码,因为读取的内存地址是减速发生的地方。

namespace Test Snippet
{
public struct Data
{
public float X;
public float Y;
public float Z;
public float dX;
public float dY;

public Data(int c)
{
this.X = ReadFloat(Base + 0x50 + (c * 0x10));
this.Y = ReadFloat(Base + 0x50 + (c * 0x10));
this.Z = ReadFloat(Base + 0x50 + (c * 0x10));
if (this.Z == 1)
{
targetindex = c;
}
this.dX = 0;
this.dY = 0;
}
}
class Class1
{
public int Base = new int();
public List<Data> data = new List<Data>();
public int targetindex = new int();
public Data targetdata = new Data();

public void GetData()
{
while (true)
{
data.Clear();
for (int c = 0; c < 64; c++)
{
Data tempdata = new Data();
teampdata = new Data(c);
data.Add(tempdata);
}
if (data.Count != 0)
{
targetdata = data[targetindex];
data.RemoveAt(targetindex);
targetdata.dX = ReadFloat(Base + 0x66);
targetdata.dY = ReadFloat(Base + 0x65);
Data[] tempdatarray = new Data[data.Count];
for (int j = 0; j < tempdatarray.Length; j++)
{
tempdatarray[j].dX = (float)Math.Acos(targetdata.dX * 10);
tempdatarray[j].dY = (float)Math.Acos(targetdata.dY * 10);
}
}

}
}
}

EDIT::我尝试了相同的过程,但没有使用线程。我有一个线程函数,该函数由我用来捕获用户输入的计时器调用。我得到了相同的结果。所以这意味着线程似乎不是问题。我还在另一台计算机上进行了测试,但出于某种原因,我并没有得到很大的不同。这让我相信我的电脑可能有问题,或者我的处理器由于其超线程能力而处理线程的方式有问题。任何人都知道超线程是否会导致未在程序中明确使用它的多线程应用程序出现问题。老实说,我不知道如何设置。

最佳答案

我没有看到任何内容表明您正在选择发布版本。这是工具栏上的一个选项。如果您直接运行调试版本,它可能正在寻找它找不到的东西。

编辑:除了我错过的标题!!!! :-)

关于c# - Visual Studio C# 2010 快速调试运行速度比发布快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12309080/

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