马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、在局部变量使用using,会在局部变量离开作用域后立即释放,不用等待GC,且可避免异常异常时候的资源泄露,是C#常用写法之一,本框架也一样支持,简单示例如下:
示例一:
[C#] 查看源码 复制代码 private void 载入地址ToolStripMenuItem_Click(object sender, EventArgs e)
{
using (FBroSharpFrame frame = (FBroSharpFrame)BrowserList.data[0].GetMainFrame())
{
frame.LoadURL("https://www.qq.com");
}
}
示例二:
[C#] 查看源码 复制代码 private void 创建URL请求ToolStripMenuItem_Click(object sender, EventArgs e)
{
using (FBroSharpRequest sharp_request = new FBroSharpRequest())
{
sharp_request.SetURL("https://api.fbrowser.site:8443/");
sharp_request.SetMethod("GET");
//添加协议头,这里用list添加,只添加了一个UA
List<FBroSharpStringMap> heard_list = new List<FBroSharpStringMap>
{
new FBroSharpStringMap
{
key = "User-Agent",
value = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.97 Safari/537.36 Core/1.116.438.400 QQBrowser/13.0.6071.400"
}
};
sharp_request.SetHeaderMap_Array(heard_list, false);
// FBroSharpRequestContext sharp_request_context;
URLEvent sharp_event = new URLEvent();
FBroSharpURLRequest.Create(sharp_request, default, sharp_event, 123456);
}
}
示例三(不推荐):除非存在全局静态变量,需要手动释放,局部建议用using的方法
[C#] 查看源码 复制代码 private void 载入地址ToolStripMenuItem_Click(object sender, EventArgs e)
{
FBroSharpFrame frame = (FBroSharpFrame)BrowserList.data[0].GetMainFrame();
frame.LoadURL("https://www.qq.com");
frame.Dispose();//释放资源
}
二、深浅拷贝的区别,其实说简单点,浅拷贝就是引用,原变量如果释放了,赋值后的变量也会一起释放,而深拷贝就是完全复制,原变量即使释放了,复制后的变量还是会存在不会释放
[C#] 查看源码 复制代码 public override bool OnBeforeBrowse(IFBroSharpBrowser browser, IFBroSharpFrame frame, IFBroSharpRequest request, bool user_gesture, bool is_redirect)
{
// 浅拷贝,当前作用域离开后fram会被释放,因此即使BrowserList.frame是在全局静态中也会被释放
BrowserList.frame = (FBroSharpFrame)frame;
// 深拷贝,当前作用域离开后fram一样会被释放,但是BrowserList.frame不会,但这里不用BrowserList.frame后要手动释放
BrowserList.frame = new FBroSharpFrame(frame);
return false;
}
注意:
1.BrowserList.frame是存在全局静态类中,非局部变量;
2.本框架事件传递的browser做了特殊处理,即使不用深拷贝在浏览器未关闭前都会一直存在,在所有引用释放的前提下关闭浏览器后会自动释放(如果自行保存了到全局数组或深拷贝了的情况下要自行删除,否则依然存在引用无法及时释放);
以上是本人使用C#的一点心得,分享出来,如有误,欢迎指正
|