前言
.NET FrameWork EF(Entity Framework)是一个很优秀的 ORM 框架,对于提高工作效率很有帮助,但由于底层原因,在程序启动时,EF 需要初始化和加载模型及其对应的数据库元数据等等,涉及到数据库连接、元数据的加载等过程,导致启动时间较长,让很多程序员对于使用 EF 望而却步,今天分享解决 EF 初始启动慢的一个思路,即通过 Python 访问心跳侦测 API 保持 EF 在线,以避免这个问题,来看看具体是怎么实现的吧?
Step By Step 步骤
-
创建一个心跳侦测 API
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Web.Http;namespace EFSample.Controllers {/// <summary>/// 心跳侦测 API/// 第三方程序如 Python 呼叫此 API,保持 EF 连接,提升性能/// </summary>[Route("keepalive")][AllowAnonymous]public class KeepAliveController : Controller{public IHttpActionResult Index(){// 1. 连接 EF 请求一个数据量少的表数据// ......// 2. 返回return ok();}} }
说明:
EF 请求可以找一个数据量少的表,对于进行 count 操作 -
编写 Python 方法,访问心跳侦测 API
import threading import requests import datetime import schedule import time import ctypes from requests.packages.urllib3.exceptions import InsecureRequestWarning# 服务器跑,请安装schedule,requests模块# 正式环境请更换主机地址 host = 'http://192.168.1.126:8083'# 保持活跃 def KeepAlive():time.sleep(2)requests.packages.urllib3.disable_warnings(InsecureRequestWarning)r = requests.get(host+'/keepalive',verify=False)print('keepalive:test'+r.text)# 不同数据分开线程 def run_threaded(job_func):job_thread = threading.Thread(target=job_func)job_thread.start()# 保持活跃 schedule.every(5).minutes.do(run_threaded,KeepAlive)ctypes.windll.user32.ShowWindow( ctypes.windll.kernel32.GetConsoleWindow(), 6 ) while True:schedule.run_pending()time.sleep(1)
-
写一个批处理文件自动执行 Python 文件
// KeepAlive.bat python D:\EFSample\KeepAlive\task.py pause
测试步骤
- 部署 Web Api
- 运行批处理
- 可设为开机自动运行
- 前提是先安装 Python 运行环境
- 用 Postman 访问一个有 EF 操作的 API,速度明显比之前快
总结
.NET Framework EF 的性能问题一直都是程序员们关注的焦点,由于 EF 在某些情况下性能表现不佳,导致了许多程序员对其诟病。针对这个问题,我们可以展开更深入的讨论和研究,在解决 EF 性能问题的过程中,不仅要考虑代码优化和调优的方面,还可以探讨一些新的思路和解决方案,本文抛砖引玉,希望本文所提供的思路和参考能够启发更多程序员在实际项目中尝试并探索更好的解决方案,从而提升 EF 性能
我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。
都看到这了,求个点赞、关注、在看三连呗,感谢支持。