2014-11-01 49 views
0

我有一個問題。我想知道如何使用Visual Studio 2010中的MVC 4在c#.Net中使用內存類。我的意思是說我不想使用數據庫或任何其他外部存儲介質,甚至是存儲庫。不使用數據庫的內存類

我想存儲數據,從該類中檢索數據。

我聽說過「緩存」,但它有其自身的侷限性。

我也不使用任何類型的存儲庫,因爲使用存儲庫,我已經使用http://www.edandersen.com/2013/05/30/asp-net-mvc-basics-part-2-viewmodel-to-model-mapping-and-editing/

那麼你能建議我該怎麼做?

回答

1

你的目標是?

如果數據非常重要,則不能將其存儲在內存中。由於許多原因,IIS應用程序可以隨時重新啓動。這些數據就會丟失,恕不另行通知。

如果數據的意思是作爲一個緩存,要麼確實使用緩存或靜態變量(通過適當的同步)。

+1

這是一個很好的答案(雖然OP從未提及IIS)。這裏有一個關於存儲遊戲信息的討論 - 這是一種可能不使用數據庫的場景 - 儘管他們建議使用文件進行存儲:http://www.codeproject.com/Questions/486416/Howplustoplussaveplusdataplusinplusc -pluswithout。如果您來自WebForms背景並希望使用ViewState類型機制,請參閱http://stackoverflow.com/questions/2230519/asp-net-c-sharp-mvc-how-do-i-live- without-viewstate – 2014-11-02 03:14:50

+0

對於吞吐量非常高的遊戲,我可能會將所有數據存儲在內存中,因爲無法執行其他操作。這會在部署或補丁時造成麻煩。對於低吞吐量的遊戲,我會使用持久性數據存儲,以避免這些問題發揮作用。 – usr 2014-11-02 08:55:33

0

您可以使用靜態對象實例。例如,假設你有一個User類:

public class User 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

,然後有一個靜態的容器爲您的實體:

public static class Container 
{ 
    static Container() 
    { 
     Users = new ConcurrentBag<User>(); 
    } 

    public static IEnumerable<User> Users { get; set; } 
    ... 
} 

然後你就可以在你的代碼隨時隨地訪問該靜態實例。很明顯,因爲ASP.NET MVC是一個多線程環境,所以你需要正確地同步對這些變量的訪問。例如使用ConcurrentBag<User>而不是List<User>實現。

,然後在你的控制器,你可以訪問你的內存數據存儲:

public ActionResult Index(int id) 
{ 
    var user = Container.Users.FirstOrDefault(x => x.Id == id); 
    if (user == null) 
    { 
     return HttpNotFound(); 
    } 

    return View(user); 
} 
相關問題