Nom*_*101 7 c# debugging visual-studio-debugging visual-c#-express-2010
我有一个Windows Forms应用程序,正好有2个线程.这些线程彼此之间有ZERO交互,Ala运行第一个线程而不会弄乱第二个线程.它们之间没有同步,因为不需要发生这种情况.第一个线程处理应用程序的UI,更改颜色和标签,并运行一个计时器来捕获一些用户输入,此计时器每200毫秒触发一次.第二个线程涉及更多,并且不断地运行其编码,直到用户退出应用程序关闭.
第二个线程首先从内存中读取并将数据存储到List中,然后使用此数据进行一些计算.我有一个StopWatch类计时器来测量完成第二个线程的一次迭代所需的时间.该计时器在线程的最开始复位并启动,然后在线程完成迭代后停止并打印到控制台.这是我获取性能数据的地方.我一直允许Thread运行至少1000次迭代,然后做一个不包括第一次运行的平均值.
构建的DEBUG版本,即由VSHOST运行的构建,或者在Visual Studio C#2010 Express中运行F5的构建.时间平均值为0.00035s,即0.35ms.
当应用程序在VSHOST之外运行时,可以通过按Ctrl-F5或从命中BUILD时生成的.exe运行应用程序.我还使用REBUILD来测试这个绝对的ZERO变化.时间平均为.365s,即365ms.这与Release Build相比大约慢了1000倍.
我完全不知道发生了什么.VSHOST做的是什么让程序运行得如此之快.我确保所有变量初始化都被考虑并且正确.话虽如此,我不知道为什么这样的事情会发生.任何关于我为什么获得这样的表现的见解Dip?
作为旁注,我使用的计算机是64位,具有超线程的四核i7,16 GB的RAM和双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);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
编辑::我尝试了相同的程序,但没有使用线程.我有用于捕获用户输入的Timer调用的线程函数.我得到了相同的结果.这意味着线程似乎不是问题.我也在不同的计算机上进行了测试,由于某种原因,我没有得到巨大的差异.这让我相信我的计算机可能有问题,或者由于其超线程能力而处理我的处理器处理线程的问题.任何人都知道超线程是否会导致多线程应用程序出现问题,而该应用程序未在程序中明确使用它.老实说,我不知道如何设置.
| 归档时间: |
|
| 查看次数: |
1691 次 |
| 最近记录: |