c#[图形应用] GetHbitmap性能问题 Gdi 高手进!!!!

BornShijia 2010-04-07 02:04:55
最近开发过程中碰到了一个性能瓶颈,要使用一个bitmap对象场景选绘制,可能涉及上百次的drawImage操作,并且涉及
图像的翻转与旋转操作,导致刷新延迟较长,后采用GDI方式进行绘制以提高速度,代码如下:
public static void StretchBlt(Graphics g, Bitmap bmpSrc)
{
//目标hdc
IntPtr pTarget = g.GetHdc();
//与目标hdc兼容的源hdc
IntPtr pSource = CreateCompatibleDC(pTarget);
IntPtr hbmp = bmpSrc.GetHbitmap();//性能瓶颈,大约耗时2ms
//源hdc选择bitmap对象的句柄
IntPtr pOldHdc = SelectObject(pSource, hbmp);

StretchBlt(pTarget, 0, 0, nWidth, nHeight, pSource, 0, 0, nWidthSrc, nHeightSrc, TernaryRasterOperations.SRCCOPY);

//以下为清理工作
IntPtr pNew = SelectObject(pSource, pOldHdc);
DeleteObject(pNew);
DeleteDC(pSource);
DeleteDC(hbmp);
g.ReleaseHdc(pTarget);
}


代码中的: IntPtr hbmp = bmpSrc.GetHbitmap();//性能瓶颈,大约耗时2ms
为所debug出的瓶颈所在。一次绘制2ms,100次以上的绘制就会出现很大延时。

不知有没有高手碰到过此类问题,另外我看了一篇《一次性能提升300%的优化实践》的文章,其中看起来是和我描述的问题一致,但实际上它是字体句柄的性能问题:
IntPtr handle = font.ToHfont(); //性能瓶颈

我采用了文章所描述的cache方式,但是却无法绘制出图像(第一次除外,因第一次是通过bmpSrc.GetHbitmap()方法获得的hdc,之后绘制所使用的hdc就是第一次获得的hdc,再也无法正常绘制图像)
它的方法其实相当于我把bmpSrc.GetHbitmap()获得的hdc做为成员变量存储起来不释放(其实我也试过,无效)。


高手进来指教!!!!!!

...全文
873 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dylike 2010-07-02
  • 打赏
  • 举报
回复
用C++可以挽回你那2毫秒
memoCKH 2010-07-02
  • 打赏
  • 举报
回复
同样的问题,顶!
masky5310 2010-04-08
  • 打赏
  • 举报
回复
关注下
帮顶
cnzdgs 2010-04-07
  • 打赏
  • 举报
回复
如果Bitmap改变的频率不高,可以用GetHbitmap得到GDI位图对象保存起来,每次绘制都使用这个对象。
内容概要:本文针对海岛微电网中可再生能源消纳能力不足与运行经济性偏低的问题,提出了一种基于空调负荷与电动汽车(EV)联合虚拟储能的协同优化调度策略。通过挖掘温控负荷(如空调)的热惰性与电动汽车充电的时空灵活性,构建联合虚拟储能系统,有效增强微电网的储能调节能力。研究建立了融合源荷两侧资源的混合整数线性规划(MILP)优化模型,实现发电成本、购电成本与碳排放成本的多目标协同优化,并引入碳排放流理论量化系统各环节的碳排放强度,提升调度方案的低碳性。基于Matlab平台的仿真结果表明,所提策略在削峰填谷、降低系统综合运行成本、提高可再生能源利用率以及减少碳排放方面均具有显著效果,为孤立微电网的能量管理提供了可行的技术路径。; 适合人群:具备电力系统分析、优化调度或综合能源系统研究背景,熟悉Matlab编程与数学建模方法的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于海岛、偏远地区等孤立型微电网的能源优化管理;②探索高比例可再生能源接入下,需求侧灵活资源(如EV、温控负荷)参与电网调峰调频的协同控制机制;③实现微电网系统经济性、低碳性与运行稳定性的多维度优化目标; 阅读建议:建议结合提供的Matlab代码深入理解MILP优化模型的构建与求解过程,重点关注虚拟储能的建模方法、源荷协同调度框架的设计以及碳排放流理论在电力系统中的具体应用,适用于科研复现、论文写作及实际工程方案设计参考。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧