稳扎稳打Silverlight(41) - 3.0TipTrick之GPU 加速, Out-Of-Browser, 应用程序库缓存, 合并 ResourceDictionary, 应用程序扩展服务,

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

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

稳扎稳打Silverlight(41) - 3.0Tip/Trick之GPU 加速,Out-Of-browser,应用程序库缓存,合并 ResourceDictionary,应用程序扩展服务,Silverlight 插件对象
@H_301_12@作者: webabcd
介绍
Silverlight 3.0 提示和技巧系列
GPU 加速 - 对 GPU 加速的支持 Out-Of-browser -  浏览器外运行,即支持脱离浏览器运行 应用程序库缓存 - 将 dll(zip) 缓存到客户端浏览器中  合并 ResourceDictionary - 整合不同位置的 ResourceDictionary  应用程序扩展服务 - 通过扩展 Application 来提供附加服务 Silverlight 插件对象的新增功能 - 在 Silverlight 3.0 中 Silverlight 插件对象的新增功能
在线DEMO
http://www.cnblogs.com/webabcd/archive/2009/08/04/1538238.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"   />

            
< 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"

                    style
="border-style: none"   />

            
</ a >

        
</ object >

        
< iframe  ID ="_sl_historyFrame"  style ="visibility: hIDden; height: 0px; wIDth: 0px;

            border: 0px"
></ 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。例: 
&lt; Deployment.ExternalParts &gt;&lt; ExtensionPart Source= &quot; System.Xml.linq.zip &quot;  / &gt;&lt; /Deployment.ExternalParts &gt;

            
</ 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 getset; }

        
public string ExtensionInfo getset; }

        

        
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, 应用程序库缓存, 合并 ResourceDictionary, 应用程序扩展服务,全部内容,希望文章能够帮你解决稳扎稳打Silverlight(41) - 3.0Tip/Trick之GPU 加速, Out-Of-Browser, 应用程序库缓存, 合并 ResourceDictionary, 应用程序扩展服务,所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1071674.html

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

发表评论

登录后才能评论

评论列表(0条)

保存