.net 如何提高从数据库获取图像和文本的速度?
我试图使用以下代码,但我的应用程序并没有获得良好的性能 我在“dt_images.ToList()”中列出了2000幅图像 在cs中:.net 如何提高从数据库获取图像和文本的速度?,.net,winforms,linq,c#-4.0,.net,Winforms,Linq,C# 4.0,我试图使用以下代码,但我的应用程序并没有获得良好的性能 我在“dt_images.ToList()”中列出了2000幅图像 在cs中: foreach (var dr in dt_Images.ToList()) { BTN = new Button(); BTN.Name = dr.Name.ToString(); BTN.Image = dr.Image;
foreach (var dr in dt_Images.ToList())
{
BTN = new Button();
BTN.Name = dr.Name.ToString();
BTN.Image = dr.Image;
BTN.Text = dr.text.ToString();
flowLayoutPanel1.Controls.Add(BTN);
BTN.Click += new EventHandler(this.pic_Click);
}
我也尝试绑定listview,但没有达到预期的速度
使用flowLayoutPanel绑定时如何提高速度
我可以绑定控制中的直接数据源吗?那我用的是哪个控件
请帮帮我,我想,通常你只需要下载你展示的图片和周围的一些图片。
因此,如果你下载当前视频后5张和前5张,你的速度就可以了。我认为,通常你只需要下载你展示的图片和周围的几张图片。
因此,如果您下载当前版本的5个after和5个before,您的速度就可以了。我们不能总是提高性能,但我们绝对可以提高感知性能。假设您正在开发UI应用程序,请参考以下逻辑 作为应用程序启动的一部分,尝试获取所有图像和相关数据。这很费时,但别担心。将这些对象缓存在内存中(HashMap?)。当您发现需要为用户创建流面板时,请尝试在缓存中查找并快速渲染图像
您正在执行的sql强制执行数据库往返。尝试在没有where条件(批量提取)的情况下执行“选择*”以填充缓存 我们不能总是提高绩效,但我们绝对可以提高感知绩效。假设您正在开发UI应用程序,请参考以下逻辑 作为应用程序启动的一部分,尝试获取所有图像和相关数据。这很费时,但别担心。将这些对象缓存在内存中(HashMap?)。当您发现需要为用户创建流面板时,请尝试在缓存中查找并快速渲染图像
您正在执行的sql强制执行数据库往返。尝试在没有where条件(批量提取)的情况下执行“选择*”以填充缓存 也许您应该只在即将使用按钮时创建一个按钮。(或者是其中的一部分,如in的回答。)
即使您确实希望一次创建所有按钮,也最好使用一个按钮来创建它们。也许您应该只在即将使用按钮时创建一个按钮。(或者是其中的一部分,如in的回答。)
即使您确实希望一次创建所有这些文件,也最好使用一个。我可以看到您使用的是一个
FlowLayout
面板。我怀疑每次添加子控件时都需要重做整个布局,这可能也需要很多时间
你能试着用这种方式把整个循环圈围起来吗
flowLayoutPanel1.SuspendLayout();
foreach (var dr in dt_Images.ToList())
{
BTN = new Button();
BTN.Name = dr.Name.ToString();
BTN.Image = dr.Image;
BTN.Text = dr.text.ToString();
flowLayoutPanel1.Controls.Add(BTN);
BTN.Click += new EventHandler(this.pic_Click);
}
flowLayoutPanel1.ResumeLayout();
您甚至可以尝试通过使用答案禁用绘画来获得更好的性能 我可以看到您正在使用
FlowLayout
面板。我怀疑每次添加子控件时都需要重做整个布局,这可能也需要很多时间
你能试着用这种方式把整个循环圈围起来吗
flowLayoutPanel1.SuspendLayout();
foreach (var dr in dt_Images.ToList())
{
BTN = new Button();
BTN.Name = dr.Name.ToString();
BTN.Image = dr.Image;
BTN.Text = dr.text.ToString();
flowLayoutPanel1.Controls.Add(BTN);
BTN.Click += new EventHandler(this.pic_Click);
}
flowLayoutPanel1.ResumeLayout();
您甚至可以尝试通过使用答案禁用绘画来获得更好的性能 图像以BLOB数据的形式存储在数据库中,并且重量很重。是否可以预取此信息并将其保存在内存中。2000不是一个大的区块,只要你的图像相当小(KB,而不是MB)。我的所有图像都是KB,但需要2分钟来加载此表单@questzendatabase获取非常耗时。您可以通过在本地内存中缓存图像来缩短周转时间。如果您的应用程序允许,请尝试先初始化这2000个对象。my foreach循环需要2分钟才能执行。是否可以删除foreach循环@问题:请看我的回答。图片作为水滴数据存储在数据库中,重量很重。是否可以预取此信息并将其保存在内存中。2000不是一个大的区块,只要你的图像相当小(KB,而不是MB)。我的所有图像都是KB,但需要2分钟来加载此表单@questzendatabase获取非常耗时。您可以通过在本地内存中缓存图像来缩短周转时间。如果您的应用程序允许,请尝试先初始化这2000个对象。my foreach循环需要2分钟才能执行。是否可以删除foreach循环@请看我的答案