稳扎稳打Silverlight(41) - 3.0TipTrick之GPU 加速, Out-Of-Browser, 应用程序库缓存

稳扎稳打Silverlight(41) - 3.0TipTrick之GPU 加速, Out-Of-Browser, 应用程序库缓存,第1张

概述[索引页] [源码下载] 稳扎稳打Silverlight(41) - 3.0Tip/Trick之GPU 加速, Out-Of-Browser, 应用程序缓存, 合并 ResourceDictionary, 应用程序扩展服务, Silverlight 插件对象 作者:webabcd 介绍 Silverlight 3.0 提示和技巧系列 GPU 加速 - 对 GPU 加速的支持 Out-Of-Bro [索引页]
[源码下载]


稳扎稳打Silverlight(41) - 3.0Tip/Trick之GPU 加速,Out-Of-browser,应用程序库缓存,合并 ResourceDictionary,应用程序扩展服务,Silverlight 插件对象

作者:webabcd


介绍
Silverlight 3.0 提示和技巧系列
GPU 加速 - 对 GPU 加速的支持 Out-Of-browser -  浏览器外运行,即支持脱离浏览器运行 应用程序库缓存 - 将 dll(zip) 缓存到客户端浏览器中  合并 ResourceDictionary - 整合不同位置的 ResourceDictionary  应用程序扩展服务 - 通过扩展 Application 来提供附加服务 Silverlight 插件对象的新增功能 - 在 Silverlight 3.0 中 Silverlight 插件对象的新增功能

在线DEMO
http://www.voidcn.com/article/p-boakcggz-tq.html  


示例
1、如何实现 GPU 加速
GPU.xaml <navigation:Page x:Class="Silverlight30.Tip.GPU"    
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
                     xmlns:d="http://schemas.microsoft.com/Expression/blend/2008"
                     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                     mc:Ignorable="d"
                     xmlns:navigation="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Navigation"
                     d:DesignWIDth="640" d:DesignHeight="480"
                     title="GPU Page">
        <GrID x:name="LayoutRoot">

                <GrID.Resources>
                        <Storyboard x:name="ani" autoReverse="True" RepeatBehavior="Forever">
                                <DoubleAnimation Storyboard.Targetname="st" Storyboard.TargetProperty="ScaleX"
                                        From="1" To="3" Duration="0:0:3" />
                                <DoubleAnimation Storyboard.Targetname="st" Storyboard.TargetProperty="ScaleY"
                                        From="1" To="3" Duration="0:0:3" />
                                <DoubleAnimation Storyboard.Targetname="rt" Storyboard.TargetProperty="Angle"
                                        From="0" To="360" Duration="0:0:3" />
                                <DoubleAnimation Storyboard.Targetname="mediaElement" Storyboard.TargetProperty="Opacity"
                                        From="1" To="0.3" Duration="0:0:3" />
                        </Storyboard>
                </GrID.Resources>

                <MediaElement x:name="mediaElement" Source="/Resource/Demo.mp4" WIDth="320" Height="240"
                        Autoplay="True" MediaEnded="mediaElement_MediaEnded" RendertransformOrigin="0.5,0.5">
                        <MediaElement.Rendertransform>
                                <transformGroup>
                                        <Scaletransform x:name="st" ScaleX="1" ScaleY="1" />
                                        <Rotatetransform x:name="rt" Angle="0" />
                                </transformGroup>
                        </MediaElement.Rendertransform>
                        
                        <!--
                                CacheMode - 缓存类型,用于 GPU 加速,当前只支持 BitmapCache(用 cpu 呈现 UIElement 一次,其结果位图会被缓存到 GPU, 然后通过 GPU 处理)
                                        可被 GPU 加速的有: Scale,Rotate,Opacity,矩形的Clip
                                CacheMode.RenderAtScale - 位图缓存相对于当前呈现的 UIElement 的放大倍数。由于需要缓存为位图,而对于 Silverlight 的矢量图形来讲,则可以设置此属性以尽可能避免失真(当然,此值设置得越高,GPU 的负担也会越重)
                        -->
                        <MediaElement.CacheMode>
                                <BitmapCache RenderAtScale="1" />
                        </MediaElement.CacheMode>
                </MediaElement>
                
                <Image Source="/Resource/logo.jpg" WIDth="160" Height="120" />

        </GrID>
</navigation:Page>
GPU.xaml.cs

using System;

using System.Collections.Generic;

using System.linq;

using System.Net;

using System.windows;

using System.windows.Controls;

using System.windows.documents;

using System.windows.input;

using System.windows.Media;

using System.windows.Media.Animation;

using System.windows.Shapes;

using System.windows.Navigation;


namespace Silverlight30.Tip

{

         public partial class GPU : Page

        {

                 public GPU()

                {

                        InitializeComponent();


                         this.Loaded += new RoutedEventHandler(GPU_Loaded);

                }


                 voID GPU_Loaded( object sender,RoutedEventArgs e)

                {

                        ani.Begin();

                }


                 private voID mediaElement_MediaEnded( object sender,RoutedEventArgs e)

                {

                         // 重播

                        mediaElement.Stop();

                        mediaElement.Play();

                }

        }

}   GPUTestPage.HTML(宿主页)
< div ID ="silverlightControlHost" >
                <object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
                        wIDth="100%" height="100%">
                         < param name ="source" value ="ClIEntBin/Silverlight30.xap" />
                         < param name ="onError" value ="onSilverlightError" />
                         < param name ="background" value ="white" />
                         < param name ="minRuntimeVersion" value ="3.0.40624.0" />
                         < param name ="autoUpgrade" value ="true" />
                         < ! --enableGPUacceleration - 是否启用 GPU 加速-- >
                         < param name ="enableGPUacceleration" value ="true" />
                         < ! --enableCacheVisualization - 是否将缓存区域可视化-- >
                        <!--
                            如果该属性为 true 则:
                                    本身的颜色代表被缓存的对象
                                    红色代表未被缓存的对象
                                    绿色代表被自动缓存的对象。如果某对象在被缓存对象的上面,那么该对象会被自动缓存
                    -->
                         < param name ="enableCacheVisualization" value ="true" />
                         < ! --enableFramerateCounter - 是否显示帧率的相关信息-- >
                        <!--
                            显示的信息在 Silverlight 程序的左上角以黑底白字做显示:
                                    第一个参数:帧率(FPS)
                                    第二个参数:GPU 的内存的使用情况。单位:KB
                    -->
                         < param name ="enableFramerateCounter" value ="true" />
                         < a href ="http://go.microsoft.com/fwlink/?linkID=149156&v=3.0.40624.0" style ="text-decoration: none" >
                                <img src="http://go.microsoft.com/fwlink/?linkID=108181" alt="Get Microsoft Silverlight"
                                         />
                         </a>
                 </object>
                <iframe ID="_sl_historyFrame" > </iframe>
         </div>     2、Out-Of-browser(对浏览器外运行的支持)
OutOfbrowser.xaml
<navigation:Page x:Class="Silverlight30.Tip.OutOfbrowser"    
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
                     xmlns:d="http://schemas.microsoft.com/Expression/blend/2008"
                     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                     mc:Ignorable="d"
                     xmlns:navigation="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Navigation"
                     d:DesignWIDth="640" d:DesignHeight="480"
                     title="OutOfbrowser Page">
        <GrID x:name="LayoutRoot">

                <!--安装/卸载按钮-->        
                <button x:name="button" Click="button_Click" WIDth="100" Height="30" />
                
        </GrID>
</navigation:Page>   OutOfbrowser.xaml.cs

/*

* Application.InstallStateChanged - 浏览器外运行的相关状态发生改变时所触发的事件

* Application.InstallState - 浏览器外运行的相关状态 [System.windows.InstallState 枚举]

*         notinstalled - 在浏览器中运行

*         Installing - 安装到桌面中

*         Installed - 在浏览器外运行

*         InstallFailed - 安装到桌面的过程中发生错误

* Application.IsRunningOutOfbrowser - 当前程序是否是从浏览器外启动的

* Application.Install() - 安装 Silverlight 程序到浏览器外(卸载只能通过右键菜单的方式卸载)

* Application.CheckAndDownloadUpdateAsync,Application.CheckAndDownloadUpdateCompleted - 一对异步方法/事件,用于更新浏览器外运行的 Silverlight 程序(从服务器上下载新的版本)

*    

* 注:在 Silverlight 项目上单击右键 -> 属性 -> Out-of-browser Settings 可以对“浏览器外运行”的相关参数做设置(也可以手动修改 PropertIEs/OutOfbrowserSettings.xml)

*/


using System;

using System.Collections.Generic;

using System.linq;

using System.Net;

using System.windows;

using System.windows.Controls;

using System.windows.documents;

using System.windows.input;

using System.windows.Media;

using System.windows.Media.Animation;

using System.windows.Shapes;

using System.windows.Navigation;


namespace Silverlight30.Tip

{

         public partial class OutOfbrowser : Page

        {

                 public OutOfbrowser()

                {

                        InitializeComponent();

                        

                         this.Loaded += new RoutedEventHandler(OutOfbrowser_Loaded);

                }


                 voID OutOfbrowser_Loaded( object sender,RoutedEventArgs e)

                {

                        Initbutton();


                        App.Current.InstallStateChanged += new EventHandler(Current_InstallStateChanged);

                }


                 voID Current_InstallStateChanged( object sender,EventArgs e)

                {

                        Initbutton();

                }


                 private voID Initbutton()

                {

                         if (App.Current.IsRunningOutOfbrowser)

                        {

                                button.Content = "卸载";

                        }

                         else

                        {

                                button.Content = "安装";

                        }

                }


                 private voID button_Click( object sender,RoutedEventArgs e)

                {

                         if (!App.Current.IsRunningOutOfbrowser && App.Current.InstallState == InstallState.notinstalled)

                        {

                                App.Current.Install();

                        }

                         else

                        {

                                MessageBox.Show( "请右键卸载");

                        }

                }

        }

}     3、应用程序库缓存的说明
ApplicationlibraryCaching.xaml
<navigation:Page x:Class="Silverlight30.Tip.ApplicationlibraryCaching"    
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
                     xmlns:d="http://schemas.microsoft.com/Expression/blend/2008"
                     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                     mc:Ignorable="d"
                     xmlns:navigation="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Navigation"
                     d:DesignWIDth="640" d:DesignHeight="480"
                     title="ApplicationlibraryCaching Page">
        <GrID x:name="LayoutRoot">

                <TextBlock>
                        <Run>
                                应用程序缓存 - 将 dll 缓存到客户端浏览器中
                        </Run>
                        <lineBreak />
                        <lineBreak />
                        <Run>
                                启用“应用程序缓存” - 在 Silverlight 项目上单击右键 -> 属性 -> 勾选“ Reduce XAP size by using application library caching”复选框
                        </Run>
                        <lineBreak />
                        <Run>
                                “应用程序缓存”不能和“脱离浏览器支持”共同使用
                        </Run>
                        <lineBreak />
                        <Run>
                                启用应用程序缓存后,可被缓存的 dll 的属性 copy Local 会被设置为 true
                        </Run>
                        <lineBreak />
                        <Run>
                                启用应用程序缓存后,所有可被缓存的 dll 会单独生成一个 zip 包
                        </Run>
                        <lineBreak />
                        <Run>
                                AppManifest.xml 会增加相应的 ExternalParts。例: <Deployment.ExternalParts><ExtensionPart Source="System.Xml.linq.zip" /></Deployment.ExternalParts>
                        </Run>
                </TextBlock>
        </GrID>
</navigation:Page>     4、合并 ResourceDictionary 的演示
App.xaml(在此处合并不同位置的 ResourceDictionary)
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
                         x:Class="Silverlight30.App"
>
        <Application.Resources>

                <!--
                        以 xaml 方式整合外部 ResourceDictionary
                -->
                <ResourceDictionary>
                        <ResourceDictionary.MergedDictionarIEs>
                                <ResourceDictionary Source="Style/buttonStyle1.xaml" />
                                <ResourceDictionary Source="Style/buttonStyle2.xaml" />
                        </ResourceDictionary.MergedDictionarIEs>
                </ResourceDictionary>
                
                <!--
                        以 cs 方式整合外部 ResourceDictionary
                        ResourceDictionary dict = System.windows.Markup.XamlReader.Load(xaml) as ResourceDictionary;    
                        Resources.MergedDictionarIEs.Add(dict);
                -->
                
        </Application.Resources>
        
</Application>     5、应用程序扩展服务的 Demo
App.xaml(注册服务)
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
                         x:Class="Silverlight30.App"
                         xmlns:svc="clr-namespace:Silverlight30.Tip"
>
        
        <!--
                以 xaml 方式注册扩展服务
        -->
        <Application.ApplicationlifetimeObjects>
                <svc:MyExtensionService />
        </Application.ApplicationlifetimeObjects>
        
        <!--
                以 cs 方式注册扩展服务(在 App 的构造函数中)
                ApplicationlifetimeObjects.Add(new Silverlight30.Tip.MyExtensionService());
        -->
        
</Application>   MyExtensionService.cs

/*

* 自定义扩展服务需要实现 Iapplicationservice 接口或 IApplicationlifetimeAware 接口

* Iapplicationservice 接口需要实现 StartService() 方法(Application.Startup 事件之前调用)和 StopService() 方法(Application.Exit 事件之后调用)

* IApplicationlifetimeAware 接口需要实现的方法有 Starting(),Started(),Exiting(),Exited() 其分别在 Application.Startup 事件的之前和之后调用,以及 Application.Exit 事件的之前和之后调用

*/


using System;

using System.Net;

using System.windows;

using System.windows.Controls;

using System.windows.documents;

using System.windows.Ink;

using System.windows.input;

using System.windows.Media;

using System.windows.Media.Animation;

using System.windows.Shapes;


namespace Silverlight30.Tip

{

         public class MyExtensionService : Iapplicationservice

        {

                 public static MyExtensionService Current { get; set; }

                 public string ExtensionInfo { get; set; }

                

                 public voID StartService(applicationserviceContext context)

                {

                        Current = this;

                        ExtensionInfo = "abc xyz";

                }


                 public voID StopService()

                {

                        

                }

        }

}   ApplicationExtensionServices.xaml.cs

using System;

using System.Collections.Generic;

using System.linq;

using System.Net;

using System.windows;

using System.windows.Controls;

using System.windows.documents;

using System.windows.input;

using System.windows.Media;

using System.windows.Media.Animation;

using System.windows.Shapes;

using System.windows.Navigation;


namespace Silverlight30.Tip

{

         public partial class ApplicationExtensionServices : Page

        {

                 public ApplicationExtensionServices()

                {

                        InitializeComponent();


                         this.Loaded += new RoutedEventHandler(ApplicationExtensionServices_Loaded);

                }


                 voID ApplicationExtensionServices_Loaded( object sender,RoutedEventArgs e)

                {

                         // 调用自定义的扩展服务

                        MessageBox.Show(MyExtensionService.Current.ExtensionInfo);

                }

        }

}     6、Silverlight 插件对象的新增功能的简要说明
Plugin.xaml
<navigation:Page x:Class="Silverlight30.Tip.Plugin"    
                     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
                     xmlns:d="http://schemas.microsoft.com/Expression/blend/2008"
                     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                     mc:Ignorable="d"
                     xmlns:navigation="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Navigation"
                     d:DesignWIDth="640" d:DesignHeight="480"
                     title="Plugin Page">
        <GrID x:name="LayoutRoot">

                <TextBlock>
                        <Run>
                                AllowHTMLPopupWindow - 是否允许使用 HTMLPage.PopupWindow d出新窗口
                        </Run>
                        <lineBreak />
                        <Run>
                                EnabledautoZoom - 是否自动调整大小以适应浏览器的缩放
                        </Run>
                        <lineBreak />
                        <Run>
                                Enablednavigation - 是否可以使用 Hyperlinkbutton 导航到外部链接
                        </Run>
                        <lineBreak />
                        <Run>
                                Application.Current.Host.Settings,Application.Current.Host.Content - 可对插件的一些属性和一些事件做设置
                        </Run>
                        <lineBreak />
                        <Run>
                                EnableGPUacceleration,EnableCacheVisualization,EnableFramerateCounter - 参见 GPUTestPage.HTML 中的说明
                        </Run>
                </TextBlock>

        </GrID>
</navigation:Page>     OK
[源码下载]
总结

以上是内存溢出为你收集整理的稳扎稳打Silverlight(41) - 3.0Tip/Trick之GPU 加速, Out-Of-Browser, 应用程序库缓存全部内容,希望文章能够帮你解决稳扎稳打Silverlight(41) - 3.0Tip/Trick之GPU 加速, Out-Of-Browser, 应用程序库缓存所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1046119.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存