双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

请教一个资源释放、垃圾回收问题

leon51 leon51 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面的代码很简单,就是使用Spire.Pdf给pdf文件加一个字符串:首先检查是否已加,若未加则添加字符串并将结果保存到数据库。
运行时内存会慢慢耗尽、导致程序退出。我加了Dispose()或GC.Collect()仍没有用。(问题不会出现在DBHelper,这个类一直使用没有异常的)
请问应该如何修改?谢谢!

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;

namespace AddWaterMark
{
class Program
{
private static readonly string connectionString = "";
private static readonly string workPath = @"";

static void Main(string[] args)
{
PdfDocument document = new PdfDocument();
string jobName;
DataRow[] rows;

string sql = "SELECT filename FROM WaterMark";
DataTable dataTable = DBHelper.ExecuteDataTable(connectionString, CommandType.Text, sql, null);
var dicFileList = GetFiles(workPath);
foreach (KeyValuePair<string, string> kv in dicFileList)
{
//如果数据库中不存在此条记录则表示未添加
rows = dataTable.Select("filename='" + kv.Key + "'");
if (rows.Length == 0)
{
try
{
jobName = kv.Key;
//添加水印
document.LoadFromFile(jobName);
if (!AddMarkSuccessed(document, jobName))
continue;

document.SaveToFile(destFile);
document.Dispose();

//添加成功后保存到数据库中
sql = $@"INSERT INTO WaterMark(filename,updatetime) VALUES ('{jobName}','{DateTime.Now}')";
DBHelper.ExecuteNonQuery(connectionString, CommandType.Text, sql, null);
}
catch (Exception)
{
}
}
}
}


private static bool AddMarkSuccessed(PdfDocument doc, string jobName)
{
try
{
float x = 160;
float y = 10;
for (int i = 0; i < doc.Pages.Count; i++)
{
//删除旧的图层
doc.Pages[i].PageLayers.DeleteOldLayer("WaterMark");
//添加新的图层
PdfFont font = new PdfFont(PdfFontFamily.TimesRoman, 30f, PdfFontStyle.Italic | PdfFontStyle.Bold);
PdfStringFormat format = new PdfStringFormat(PdfTextAlignment.Center);
PdfPageLayer layer = doc.Pages[i].PageLayers.Add("WaterMark", true);
layer.Graphics.SetTransparency(0.3f);
layer.Graphics.DrawString(jobName, font, PdfBrushes.Red, x, y, format);
}
return true;
}
catch (Exception)
{
return false;
}
}
}
}
...全文
评论 6
收藏 已收藏
分享
返回顶部
leon51
C# 111,129 成员 642,540 内容