Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Net MVC,从数据库动态加载图像-图像闪烁_C#_Asp.net Mvc - Fatal编程技术网

C# Net MVC,从数据库动态加载图像-图像闪烁

C# Net MVC,从数据库动态加载图像-图像闪烁,c#,asp.net-mvc,C#,Asp.net Mvc,我正在从数据库加载一个图像,并在_Layout.cshtml中显示该图像 图像可以更改(登录后),每个公司可能有不同的图像,因此在登录后,我转到数据库并获取该公司对应的图像(基于其Id)。我需要保留这个加载的映像,不需要再次转到服务器 一切正常,我可以加载图像并显示在_布局中,但在每次请求后,图像都会“闪烁”,因为_布局正在重新创建 我按照问题(步骤1)从数据库加载图像 我拥有的代码是: public ActionResult CarregarLogoEmpresa() {

我正在从数据库加载一个图像,并在_Layout.cshtml中显示该图像

图像可以更改(登录后),每个公司可能有不同的图像,因此在登录后,我转到数据库并获取该公司对应的图像(基于其Id)。我需要保留这个加载的映像,不需要再次转到服务器

一切正常,我可以加载图像并显示在_布局中,但在每次请求后,图像都会“闪烁”,因为_布局正在重新创建

我按照问题(步骤1)从数据库加载图像

我拥有的代码是:

    public ActionResult CarregarLogoEmpresa()
    {
        if (SecurityManager.Instance.Identity.IsAuthenticated)
        {
            var codigoEmpresaLogada = SecurityManager.Instance.Session.IdEmpresa;

            var logoEmpresa = _empresaAppService.BuscarLogoEmpresa(codigoEmpresaLogada);

            //return Json(Convert.ToBase64String(logoEmpresa), JsonRequestBehavior.AllowGet);

            return File(logoEmpresa, "image/jpg");
        }

        return null;
    }
并且认为:

<img src='@Url.Action("CarregarLogoEmpresa", "Image")' />


是否有办法保持图像加载而不是重新创建,避免每次都闪烁?

无论是否从数据库加载,您的图像在每次请求时都会闪烁。由于每次从数据库中拉出图像所需的时间,这种影响可能会被放大。我建议你考虑另一个选择,如果你有一个。例如,如果您使用的是Azure或AWS,则可以使用文件/blob存储来承载映像,这可能比从数据库加载映像更快。我特别不喜欢将图像存储在数据库中,因为这样会很昂贵,而且备份会越来越大

回到“眨眼”问题。像GitHub这样的一些网站不会在每次请求时重新加载“布局”,只会加载更改的内容。实现这一点的标准库是
pjax
(我相信GitHub使用的是pjax)。尽管GitHub是在Rails上制作的,但该解决方案也应该适用于ASP.NET MVC

看一看:


无论是否从数据库加载,您的图像在每次请求时都会闪烁。由于每次从数据库中拉出图像所需的时间,这种影响可能会被放大。我建议你考虑另一个选择,如果你有一个。例如,如果您使用的是Azure或AWS,则可以使用文件/blob存储来承载映像,这可能比从数据库加载映像更快。我特别不喜欢将图像存储在数据库中,因为这样会很昂贵,而且备份会越来越大

回到“眨眼”问题。像GitHub这样的一些网站不会在每次请求时重新加载“布局”,只会加载更改的内容。实现这一点的标准库是
pjax
(我相信GitHub使用的是pjax)。尽管GitHub是在Rails上制作的,但该解决方案也应该适用于ASP.NET MVC

看一看:


经过一些研究之后,我可以使用Asp.Net MVC ActionFilter对其进行分类

[OutputCache(Duration = 300, VaryByParam="none", Location = OutputCacheLocation.Client)]
关于行动结果


我不知道这是否是更好的方法,但至少在这种情况下,对我来说是有效的。

经过一些研究后,我可以使用Asp.Net MVC ActionFilter进行分类

[OutputCache(Duration = 300, VaryByParam="none", Location = OutputCacheLocation.Client)]
关于行动结果


我不知道这是否是更好的方法,但至少在这种情况下,对我来说是有效的。

这种闪烁可能是因为从数据库加载图像所花费的时间。我建议使用Asp.Net OutputCache以最小化此加载时间

行动:

[OutputCahce(VaryByParam="CodigoEmpresaLogada", Duration=30)]
public ActionResult CarregarLogoEmpresa(int CodigoEmpresaLogada)
{
    if (SecurityManager.Instance.Identity.IsAuthenticated)
    {
        var logoEmpresa = _empresaAppService.BuscarLogoEmpresa(CodigoEmpresaLogada);

        //return Json(Convert.ToBase64String(logoEmpresa), JsonRequestBehavior.AllowGet);

        return File(logoEmpresa, "image/jpg");
    }

    return null;
}
视图:


发生此闪烁的原因可能是从数据库加载图像所需的时间。我建议使用Asp.Net OutputCache以最小化此加载时间

行动:

[OutputCahce(VaryByParam="CodigoEmpresaLogada", Duration=30)]
public ActionResult CarregarLogoEmpresa(int CodigoEmpresaLogada)
{
    if (SecurityManager.Instance.Identity.IsAuthenticated)
    {
        var logoEmpresa = _empresaAppService.BuscarLogoEmpresa(CodigoEmpresaLogada);

        //return Json(Convert.ToBase64String(logoEmpresa), JsonRequestBehavior.AllowGet);

        return File(logoEmpresa, "image/jpg");
    }

    return null;
}
视图:



你能把你的密码贴出来吗?@antoinedelia准备好了!将图像放置在DB之外可能会允许浏览器缓存不“重新加载”它。或者查看一下MVC的PartialView,这样您就不必每次请求都重新加载布局了。@Mackan,我在这里做了一些测试,我可以在操作中使用[OutputCache]进行排序。由于图像必须加载一次(并且不会修改),您可以发布您的代码吗?@antoinedelia ready!将图像放置在DB之外可能会允许浏览器缓存不“重新加载”它。或者查看一下MVC的PartialView,这样您就不必每次请求都重新加载布局了。@Mackan,我在这里做了一些测试,我可以在操作中使用[OutputCache]进行排序。因为图像必须加载一次(并且不会修改),所以这是一个很好的分析点。当然,我会看看这些例子。现在,在做一些测试时,我可以使用[OutputCache]进行分类,我不知道这是否也是更好的方法。请更正或使用更好的word。。“您的图像在每次请求时都会闪烁,无论是否从数据库加载。”这不是真的。它“闪烁”的原因是每次从服务器中提取图像时,都会加载页面。将图像作为资源,即静态内容。。。将允许客户端浏览器/pc缓存图像。。。这意味着页面加载时不再“闪烁”。这里的建议是,如果图像是布局的一部分,则不应从db或mvc控制器加载图像,而应为正常的web内容。@Seabizkit,图像是从服务器动态加载的。这对同一个人来说是不一样的,我的意思是,如果有人登录,会为他显示一个图像,如果另一个人登录,会显示另一个图像。关键是,一旦加载此图像,它在处理过程中必须是相同的。顺便说一下,我可以使用MVC中的[OutputCache]进行分类@马图拉诺我明白你的意思。。我会有文件夹结构来支持这一点,动态创建它们,只保存相对路径,然后从数据库中获取路径,这是一个很好的分析点。当然,我会看看这些例子。现在,在做一些测试时,我可以使用[OutputCache]进行分类,我不知道这是否也是更好的方法。请更正或使用更好的word。。“您的图像在每次请求时都会闪烁,无论是否从数据库加载。”这不是真的。它“闪烁”的原因是