You are not logged in. This forum allows only logged in users to post. If you want to post in the forum, please log in.
Download
Magazine
Develop
Account
Download
Magazine
Develop
Login
Forgot Account/Password
Create Account
Language
Help
Language
Help
×
Login
Login Name
Password
×
Forgot Account/Password
Category:
Software
People
PersonalForge
Magazine
Wiki
Search
OSDN
>
Find Software
>
MikuRi-On
>
Forums
>
Developers
>
SequenceManagerの内部設計について
MikuRi-On
Description
Project Summary
Developer Dashboard
Web Page
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
Downloads
List of Releases
Stats
Source Code
Code Repository list
Subversion
View Repository
Ticket
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
Documents
FrontPage
Title index
Recent changes
Communication
Forums
List of Forums
Developers (33)
Help (1)
Open Discussion (1)
Mailing Lists
list of ML
News
Forums:
Developers
(Thread #22027)
Return to Thread list
RSS
SequenceManagerの内部設計について (2009-03-14 13:15 by
my04337
#42545)
Create ticket
現在、mikurion.SequenceManager.Base.*のコーディングが終了したところですが、レイヤ、バンク、シーケンスを内部でどのように保存するかについて意見を聞きたいため投稿しました。
前提条件は以下のとおりです。
・ノート命令、ボリューム変更命令等はISequenceMessageクラスから派生。
・SequenceManagerはスレッドセーフにする必要がある(少なくともUI,シーケンサから同時アクセス)。
・SequenceManager内のデータは、UIからは読み書き、シーケンサからは読み取りのみされる。
・シーケンサが再生するデータは、最新のものである必要はない(1小節分をまとめて取得してもよい)。
この場合、UIからは編集しやすく、編集中でもシーケンサからの読み出しでエラーが発生しない構成にする必要があるため、自分は以下の構成を考えています。
1.設定をsqliteを用いてDB(ファイル)に保存する。
2.java.util.List等を用いてメモリ内に保存する。
1の方法については、排他処理が自動的に行われる、譜面の保存処理の実装がいらない(すでにされている)メリットがあるかわりに、SQL文を用いる必要があるのとオーバーヘッドが大きくなる、外部のライブラリを使う必要があるというデメリットがあります。
2の方法については、排他処理が自動では行われない、譜面の保存処理の実装が必要(シリアライズで比較的簡単に実装可能)といったデメリットがある代わりに、クラスのメソッド呼び出しで操作可能なのとメモリ上に記録されるため高速であるというメリットがあります。
どちらの方法についても、UI側ではどのイベントオブジェクトがどれに対応しているのかを把握しないと編集/表示できないため作業コピーを保持する必要があるという問題があります。
実装するに当たって上記の方法以外にもいいものがあればどんどん出してください。
また、上記の方法に質問があったりどちらがいいといった意見があればコメントお願いします。
RE: SequenceManagerの内部設計について (2009-03-19 01:35 by
onodes
#42621)
Create ticket
こんにちはonodesです。
この場合の排他処理について詳しくご教授いただきたい。
Reply to
#42545
RE: SequenceManagerの内部設計について (2009-03-20 08:31 by
my04337
#42654)
Create ticket
tomoteruです。
1のsqliteを使用する場合は、sqlite自体が排他処理を行っているため、特に必要にはなりませんが、sqliteのロックはファイルに対するロックとなっているため、頻繁に細かく読み出すことは速度面からかなり苦手であると思います。
2のListを用いる場合は、言語側での排他処理が行われないため、シーケンスマネージャやレイヤなどの側で排他処理を行う必要があります。
とはいえ、Javaではsynchronized(C#でのlock)を用いることで、単純に排他処理したい区間を
synchronized(排他処理したいオブジェクト){...}
という形でくくることで行えます。
こちらの方は速度の点ではsqliteと比較しても桁違いに高速で、わざわざSQL文を発行しなくてもよいためJavaの文法内で書くことが出来、コンパイル時に構文エラーを検出できる利点があります。
自分としては2がおすすめですね。
Reply to
#42621
RE: SequenceManagerの内部設計について (2009-03-22 15:15 by
circussion
#42690)
Create ticket
見るのが遅くなって申し訳ないです、circussionです。
大雑把な意見になってしまいますが、外部ライブラリで変に制限が掛かったり、無理矢理なプログラムを作成するくらいなら2のメモリ内保存の方が、比較的副作用が小さい気もしますが…気のせいでしょうかね。
保存の為の速度は速いに越した事はありませんが、正しく保存される・保存形態が汎用的である方が何かと便利な気がするので、方法としては2の方がいいかな?とは思います。
何となくでしか把握する事が出来なかったので、論点として質問意見がずれてたら申し訳ないです。
Reply to
#42545