可能重复:
C#中的结构与类
很抱歉,如果这是一个开放式问题,但我只是想知道我的结构是否太大了.我想要使用结构的原因是因为我已经知道它们比类更快,我认为我真的需要速度.
我发现如果你的结构太大,它实际上会减慢你的程序,所以我想知道这个指南是什么以及我的结构是否需要转换为类.
public struct Tiles
{
public Rectangle rect;
//i know this wont run with them being initalized like this but if i change to a class this will
//stay like this and im in the middle of deciding what to do
Bitmap currentPic = new Bitmap(50, 50);
ImageAttributes imgAttr = new ImageAttributes();
float[][] ptsArray;
ColorMatrix clrMatrix;
public void setTiles(int i, int k, int width, int height)
{
Rectangle temp = new Rectangle(i, k, width, height);
rect = temp;
float[][] ptsTemp ={
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, .9f, 0},
new float[] {0, 0, 0, 0, 1}};
ptsArray = ptsTemp;
clrMatrix = new ColorMatrix(ptsArray);
currentPic = The_Great_Find__Dig_Deeper.Properties.Resources.darknessflashlight;
}
public void setTransperancy(float value)
{
clrMatrix.Matrix33 = value;
}
public void drawRect(Graphics g)
{
imgAttr.SetColorMatrix(clrMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
g.DrawImage(currentPic, rect, 0, 0, currentPic.Width, currentPic.Height, GraphicsUnit.Pixel, imgAttr);
}
bool blackened
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
我应该把它换成课吗?它对我来说有点臃肿.我正在使用Visual Studio 2008.
对非黑带程序员的建议:不要优化代码.
对黑带程序员的建议:稍后优化您的代码.
我认真地建议你留意这个建议!
为了给你一些更相关的解释,你应该知道,与类不同,结构是在堆栈上分配的,而不是在堆上.堆栈分配稍微便宜一些,但通常只适用于短期或按值传递或将要存储在大型数组中的小型对象.
如果您不知道通过值传递的内容,则意味着只要将整个结构作为参数传递给方法,就会复制整个结构.如果您的结构不是很小,这很快就会变得非常昂贵.如果您不理解这种区别,它还可能导致意外行为:对方法中的类参数所做的更改对方法调用者是可见的; 对方法中的struct参数所做的更改对方法调用者不可见(因为该方法正在更改原始数据的副本).
重申我的第一点:除非你确定你知道你在做什么,否则不要使用结构.
希望这可以帮助!
先发制人的优化是万恶之源。俗话说得好。构建您的应用程序,只有在出现性能问题时才尝试修复它们。例如,一种方法的运行速度可能是另一种方法的两倍,但您可以并行化第一个方法并一次运行 4 个方法。因此第一种方法实际上更快。您必须先充分了解您的性能问题,然后才能解决它。
回答你的问题:据我所知,当传递给方法时,大小为 16 字节或更大的结构比类慢。
| 归档时间: |
|
| 查看次数: |
2886 次 |
| 最近记录: |