欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
博客園 - QPG - 技術(shù)篇(1)--QPG容器的基本用法
如果你是學(xué)生,最好先到畢業(yè)生之歌看一下幾個(gè)基本概念.
http://www.cnblogs.com/QPG2006/articles/246105.html

如果你已經(jīng)對Castle有一定了解,可以參看:
http://www.cnblogs.com/QPG2006/articles/245667.html

或者直接看下文:


 靜靜的夜晚并非一切都已睡去……

    QPG希望借助大家已有的成果,來(lái)達到快速開(kāi)發(fā)高質(zhì)量軟件的目的。當然我們也不相信有銀彈存在,因為軟件開(kāi)發(fā)中最困難的是要面對人的無(wú)形的期望,而將說(shuō)不清楚的事情表達出來(lái),也許才是軟件開(kāi)發(fā)的真正困難所在。尤其是在什么所謂的管理系統上,也許沒(méi)有多少人能看到目標前就已經(jīng)耗盡了體力!

   廢話(huà)少說(shuō),那么QPG平臺到底為程序員提供了什么呢?回答是QPG不是包羅萬(wàn)象的框架,他借助castleIoC\AOP、log4net、NHibernate等提供的強大功能來(lái)幫助程序員簡(jiǎn)化開(kāi)發(fā)任務(wù)。QPG本身提供了端到端的服務(wù)負載均衡,任何程序在這個(gè)世界里都可以提供服務(wù),當然也可以消費服務(wù)!當然這肯定對某些人來(lái)說(shuō)還不夠,隨著(zhù)今后的需求增加,我們會(huì )再集成一些輕量級的有用組件。

  下面以一個(gè)簡(jiǎn)單的例子來(lái)介紹QPG平臺的基本功能:正確高效使用組件、日志、加密壓。
 

首先請下載開(kāi)發(fā)演示文件,把它解壓到一個(gè)目錄,你可以看到如下的Basic項目。

 們編寫(xiě)了一個(gè)產(chǎn)品組件,還有一個(gè)銷(xiāo)售管理組件。不過(guò)那個(gè)組件會(huì )在今后的AOP里再演示了?,F看看產(chǎn)品組件,是否很簡(jiǎn)單:

namespace QPG.Demo.Components
{
    
using System;


    
public class Product
    
{
        
private int _price;
        
private int _stocks;

        
private string  _name;

        
public Product()
        
{
            _name
="";
            _price
=0;
            _stocks
=0;
            Console.WriteLine(
"call Product()");//用來(lái)查看容器是否自動(dòng)初始化對象

        }

        
public Product(string name,int price,int num) {
            _name
=name;
            _price
=price;
            _stocks
=num;
            Console.WriteLine(
string.Format("Product({0},{1},{2})",name,price,num));
        }


        
public virtual string Name{
            
get{return _name;}
        }

        
public virtual int Price{
            
get{return _price;}
        }

        
public virtual int Stocks{
            
get{return _stocks;}
        }


        
public virtual void setPrice(int newPrice) {
            _price
=newPrice;
        }


        
public virtual void outStock(int num) {
            
int temp=_stocks-num;
            
if(temp<0throw new Exception("stock lack!");
            _stocks
=temp;
        }

        
    }

}


 

打開(kāi)bin\Debug\config\app_config.xml,這個(gè)文件用來(lái)配置您自己編寫(xiě)的組件。本例中的配置如下:

<?xml version="1.0" encoding="utf-8" ?> 

<configuration> 
     
<components>
        
<component id="p1" type="QPG.Demo.Components.Product,Basic" lifestyle="Singleton"  >
          
<parameters>
                
<name>P1</name>
                
<price>333</price>
                
<num>33</num>
           
</parameters>
         
</component>
        
         
<component id="p2" type="QPG.Demo.Components.Product,Basic" lifestyle="Pooled" initialPoolSize="2" maxPoolSize="4" />
         
         
<component id="p3" type="QPG.Demo.Components.Product,Basic" lifestyle="Transient" />
    
</components>
</configuration>
 

我們配置了三個(gè)Product對象:

p1就只會(huì )存在一個(gè),并且不會(huì )被容器釋放;

p2會(huì )存在至少兩個(gè)實(shí)例,當內存池不夠時(shí)容器會(huì )創(chuàng )建時(shí)新的并且加入到實(shí)例池,但是最多只有4個(gè)。是否比較難理解?我們拿孫悟空為例,雖然可以變出許多猴子,但是都是他的替身罷了。

p 3則總是新人,但愿談戀愛(ài)的弟弟妹妹不要這樣:-) 

看看我們的測試片斷:

[TestFixture]
    
public class LisfCycleTester {
        
private SimpleContainer container;
    
        [SetUp]
        
public void Init() {
            Hashtable ht
=new Hashtable();
            
//ht.Add("qpg.email_sender",typeof(EmailSender));
            container = new SimpleContainer(ht);
        }

        [TearDown]
        
public void Finish() {
            container.Dispose();
        }


private void visitProduct(string key,int num) {

            Product p;
            ArrayList  ps
=new ArrayList();

            
int i;
            
for( i=0;i<num;i++{
                p
=container[key] as Product;
                Console.WriteLine(
"{0}--{1}",i+1,p.Price);
                p.setPrice((i
+1)*10);//看看是否實(shí)用了新對象
                ps.Add(p);
            }

            
for(i=0;i<ps.Count;i++{
                container.Release(ps[i]);
            }

            ps.Clear();
        }

private void visitPooledProduct(string key,int num) {

            Product p;
            
int i;
            
for( i=0;i<num;i++{
                p
=container[key] as Product;
                Console.WriteLine(
"{0}--{1}",i+1,p.Price);
                p.setPrice((i
+1)*10);
                container.Release(p);
            }

            
        }

        

        
private void runTest(string key) {
            
            
long t1=System.Environment.TickCount;
            visitProduct(key,
4);
            
if(key!="p2") visitProduct(key,10000);
            
else visitPooledProduct(key,10000);
            
long t2=System.Environment.TickCount-t1;
            Console.WriteLine(
"{0}ms",t2);
        }


        [Test]
        
public void tesSingleton() {
            runTest(
"p1");
        
        }
    
        [Test]
        
public void testPool() {
            
            runTest(
"p2");
        }

        [Test]    
        
public void testMany() {
            

            runTest(
"p3");
        }

 

讓我們來(lái)看看執行的結果如何吧:

先運行tesSingleton

 

call Product()

call Product()

Product(P1,333,33)

1--333

2—10    //哈哈第二次使用的還是那個(gè)對象,我們在前次給他的價(jià)格已經(jīng)設置為10元了

3--20

4--30

1--40

2--10

3—20

。。。。。。

您可以看到系統先產(chǎn)生了2個(gè)Product,那是因為p2最少有兩個(gè),平臺已經(jīng)知道我們的期望,自動(dòng)幫我們做了!

P1只被產(chǎn)生一次:Product(P1,333,33),這些初始值就是我們在配置文件里寫(xiě)的,不是嗎?

 

在我的機器上運行10004次訪(fǎng)問(wèn)花費了1610ms

 

再看看testPool()

call Product()

1--0

2--0

call Product()

3--0

call Product()

4--0

1--40

2--10

3--20

4--30

5--40

6--50

7--60

8--70

9--80

。。。。。。

您可以看到雖然系統先產(chǎn)生了2個(gè)Product,但是在訪(fǎng)問(wèn)并且不釋放情況下第三、四次訪(fǎng)問(wèn)時(shí),系統調用了缺省構造函數來(lái)產(chǎn)生一個(gè)新的實(shí)例。以后使用訪(fǎng)問(wèn)并釋放的方法,這四個(gè)實(shí)例滿(mǎn)足了我們一萬(wàn)次的訪(fǎng)問(wèn)。在我的機器上,這個(gè)TestCase用了1687ms,也證明盡管有緩存,但是畢竟構造兩次也花了些時(shí)間。所以沒(méi)有Singleton快。

 

最后再看看每次都來(lái)個(gè)新的:

call Product()

call Product()

call Product()

1--0

call Product()

2--0

call Product()

3--0

call Product()

4--0

call Product()

1--0

call Product()

2--0

call Product()

3--0

call Product()

4--0

call Product()

。。。。。。

您可以看到確是每次都會(huì )產(chǎn)生新的,這樣肯定最慢了,在我機器上用了4031ms。

 

測試程序里還演示了兩個(gè)常用的功能,寫(xiě)日志和加密壓縮。演示結果您可以在LOG\下發(fā)現一個(gè)log.txt,打開(kāi)看看應該如下:

[DEBUG][2005-09-27 21:23:09,484]--hello world! SO SIMPLE!

 

是否太過(guò)簡(jiǎn)單?如果您了解log4net ,您可以配置成您想要的日志方式,比如寫(xiě)系統日志、謝數據庫、遠程對象、UDP廣播等。

 

在看看加密壓縮吧:

Zip:UEsDBBQAAAAIAEi0OzMnz+xKCgAAAAgAAAAHAAAARFRPLnhtbAsMcNcrSS0uAQBQSwECFAAUAAgACABItDszJ8/sSgoAAAAIAAAABwAAAAAAAAAAAAAAAAAAAAAARFRPLnhtbFBLBQYAAAAAAQABADUAAAAvAAAAAAA=

Encrypt:cvvPjAY7PxOBywAak7KOw6b5J157cRpVLm4pUWDJIc+i3ihSvn5OMahF1sFDrkckMxvLod78maAQppESMCKa0x9pJxvrZbN5i/rMMNSTfF6ffA57JhyhZSgNMrufC0daVX4g9eEJ8sQD5MTo+OPZAOjjZW+kVs4TvHa8gc5QA/4y9HAaEk7v/8kBV7ENGnHvSQii8sR9bTDjIF6k8YNZpXjISMH7iVfY

Decrypt:UEsDBBQAAAAIAEi0OzMnz+xKCgAAAAgAAAAHAAAARFRPLnhtbAsMcNcrSS0uAQBQSwECFAAUAAgACABItDszJ8/sSgoAAAAIAAAABwAAAAAAAAAAAAAAAAAAAAAARFRPLnhtbFBLBQYAAAAAAQABADUAAAAvAAAAAAA=

UnZip:QPG.test

這就是我們要的,是很簡(jiǎn)單,基本夠用就好!

另外心細的讀者會(huì )發(fā)現SimpleContainer.MessageQueue,這是干什么的呢?那是我們分布式處理的消息隊列代理,且聽(tīng)下回分解......
(在沒(méi)有正確配置時(shí)使用會(huì )報錯喔!)

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
由一個(gè)Quiz想到的
5天玩轉C#并行和多線(xiàn)程編程 —— 第一天 認識Parallel
C# 委托(Delegate) | 菜鳥(niǎo)教程
base 關(guān)鍵字
BP網(wǎng)絡(luò )模型的實(shí)現(C#)
C# 遞歸算法?。╪多舉例)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久