Unsafe ใน C#: ความเร็วแตกต่างกันอย่างสิ้นเชิง
เขียนโปรแกรมแปลงภาพสีเป็น GrayScale เขียนโค้ดแบบ unsafe ดังนี้
byte* p = (byte*)(void*)Scan0;
for (int y = 0; y < Image.height; y++, p+= nOffset, h += gOffset)
{
for (int x = 0; x < Image.Width; x++, p+=3, h++)
{
*h = (byte)(0.299 * p[2] + 0.587 * p[1] + 0.114 * p[0]);
}
}
for (int y = 0; y < Image.height; y++, p+= nOffset, h += gOffset)
{
for (int x = 0; x < Image.Width; x++, p+=3, h++)
{
*h = (byte)(0.299 * p[2] + 0.587 * p[1] + 0.114 * p[0]);
}
}
ใช้เวลารัน นาน แบบเห็นได้ชัดเจน แต่พอเปลี่ยนโค้ดเป็นแบบนี้
byte* p = (byte*)(void*)Scan0;
int height = Image.height;
int width = Image.width;
for (int y = 0; y < height; y++, p+= nOffset, h += gOffset)
{
for (int x = 0; x < width; x++, p+=3, h++)
{
*h = (byte)(0.299 * p[2] + 0.587 * p[1] + 0.114 * p[0]);
}
}
int height = Image.height;
int width = Image.width;
for (int y = 0; y < height; y++, p+= nOffset, h += gOffset)
{
for (int x = 0; x < width; x++, p+=3, h++)
{
*h = (byte)(0.299 * p[2] + 0.587 * p[1] + 0.114 * p[0]);
}
}
ปรากฏว่าเห็นความแตกต่างเรื่องความเร็วได้อย่างชัดเจน (อันหลังเร็วกว่าอันแรกอย่างแรง)
- -"