美高梅游戏官网娱乐_美高梅手机登录网站

美高梅游戏官网娱乐是公司推出的企业级即时在线娱乐平台,美高梅手机登录网站业界专业、信誉最好的博彩网站,美高梅游戏官网娱乐拥有最高优惠活动和返水,拥有丰富的管理经验和专业的技术队.。

来自 编程 2019-12-17 13:06 的文章
当前位置: 美高梅游戏官网娱乐 > 编程 > 正文

后端代码,/// 美高梅游戏官网娱乐写日志类 //

下载文件:

100多行代码实现6秒完成50万条多线程并发日志文件写入,50万日志文件

100多行代码实现6秒完成50万条多线程并发日志文件写入,支持日志文件分隔

日志工具类代码:

美高梅游戏官网娱乐 1using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Utils { /// <summary> /// 写日志类 /// </summary> public class LogUtil { #region 字段 public static object _lock = new object(); public static string path = "D:\log"; public static int fileSize = 10 * 1024 * 1024; //日志分隔文件大小 private static ConcurrentQueue<Tuple<string, string>> msgQueue = new ConcurrentQueue<Tuple<string, string>>(); #endregion #region 静态构造函数 static LogUtil() { Thread thread = new Thread(new ThreadStart(() => { try { int i; List<string> list; Tuple<string, string> tuple; while (true) { i = 0; list = new List<string>(); while (msgQueue.TryDequeue(out tuple) && i++ < 10000) { list.Add(tuple.Item1.PadLeft(8) + tuple.Item2); } if (list.Count > 0) { WriteFile(list, CreateLogPath()); } Thread.Sleep(1); } } catch { } })); thread.IsBackground = true; thread.Start(); } #endregion #region 写文件 /// <summary> /// 写文件 /// </summary> public static void WriteFile(List<string> list, string path) { try { if (!Directory.Exists(Path.GetDirectoryName(path))) { Directory.CreateDirectory(Path.GetDirectoryName(path)); } if (!File.Exists(path)) { using (FileStream fs = new FileStream(path, FileMode.Create)) { fs.Close(); } } using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs)) { list.ForEach(item => { #region 日志内容 string value = string.Format(@"{0} {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), item); #endregion sw.WriteLine(value); }); sw.Flush(); } fs.Close(); } } catch { } } #endregion #region 生成日志文件路径 /// <summary> /// 生成日志文件路径 /// </summary> public static string CreateLogPath() { int index = 0; string logPath; bool bl = true; do { index++; logPath = Path.Combine(path, "Log" + DateTime.Now.ToString("yyyyMMdd") + (index == 1 ? "" : "_" + index.ToString()) + ".txt"); if (File.Exists(logPath)) { FileInfo fileInfo = new FileInfo(logPath); if (fileInfo.Length < fileSize) { bl = false; } } else { bl = false; } } while (bl); return logPath; } #endregion #region 写错误日志 /// <summary> /// 写错误日志 /// </summary> public static void LogError(string log) { msgQueue.Enqueue(new Tuple<string, string>("[Error] ", log)); } #endregion #region 写操作日志 /// <summary> /// 写操作日志 /// </summary> public static void Log(string log) { msgQueue.Enqueue(new Tuple<string, string>("[Info] ", log)); } #endregion } } View Code

测试代码:

美高梅游戏官网娱乐 2using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Utils; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { LogUtil.path = Application.StartupPath + "\log"; //初始化日志路径 } private void button1_Click(object sender, EventArgs e) { for (int n = 0; n < 10; n++) { Thread thread = new Thread(new ThreadStart(() => { int i = 0; for (int k = 0; k < 50000; k++) { LogUtil.Log((i++).ToString() + " abcdab[email protected]#$%^&dabcdabcdabcdabcdabcdabcdabcdabcd"); } })); thread.IsBackground = true; thread.Start(); } } } } View Code

 测试截图:

美高梅游戏官网娱乐 3

美高梅游戏官网娱乐 4

 

100多行代码实现6秒完成50万条多线程并发日志文件写入,支持日志文...

代码:

后端代码:

public IActionResult DownloadFile()
{
var FilePath = @"./files/deparment.xlsx";
var stream = System.IO.File.OpenRead(FilePath);
return File(stream, "application/vnd.android.package-archive", Path.GetFileName(FilePath));
}

页面代码:

<a href=";

上传文件:

nuget下载:EPPlus.Core

基本思路:目前是通过将页面上传入的文件保存至项目地址里面,再读取出来,再判断传入ecxel文件的头部是否符合要求,符合则写入数据库

 美高梅游戏官网娱乐 5

代码:

后端代码:

public object AddMulitDeparment(IFormCollection files)
{
string[] colName = new string[] { "公司名称", "部门经理", "部门名称", "员工数量", "部门代码" };
var result = new object();
string message = "";
if (files != null && files.Files.Count > 0)
{
for (int i = 0; i < files.Files.Count; i++)
{
var file = files.Files[i];
try
{
object path = _importExcelUtil.SaveExcel(file);
FileInfo fileInfo = new FileInfo((string)path);
using (FileStream fs = new FileStream(fileInfo.ToString(), FileMode.Create))
{
file.CopyTo(fs);
fs.Flush();
}
using (ExcelPackage package = new ExcelPackage(fileInfo))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
if (_importExcelUtil.JudgeCol(worksheet,colName))
{
result = new
{
data = _importExcelUtil.SaveDepToDB(worksheet)
};
System.IO.File.Delete((string)path);
}
}
}
catch (Exception ex)
{
message= ex.Message;
}
}
}
return result;
}

//判断头部(取出表格内容同)

public bool JudgeCol(ExcelWorksheet worksheet,string[] colName)
{
int ColCount = worksheet.Dimension.Columns;
bool bHeaderRow = true;
//excel下标从1开始
for (int col = 1,index=0; col <= ColCount&&index<colName.Length; col++,index++)
{
string c = worksheet.Cells[1, col].Value.ToString();
if (!c.Equals(colName[index]))
{
bHeaderRow = false;
throw new Exception("格式错误,导入文件的第"+index+"列应为"+colName[index]+"!");
}
}
return bHeaderRow;
}

前端代码,由于需要上传文件,需要将http请求头部的Content-Type修改为multipart/form-data

*仅作为个人学习记录

本文由美高梅游戏官网娱乐发布于编程,转载请注明出处:后端代码,/// 美高梅游戏官网娱乐写日志类 //

关键词: